go語言運行配置 go語言 運行

golang配制高性能sql.DB

有很多教程是關(guān)于Go的sql.DB類型和如何使用它來執(zhí)行SQL數(shù)據(jù)庫查詢的。但大多數(shù)內(nèi)容都沒有講述 SetMaxOpenConns() , SetMaxIdleConns() 和 SetConnMaxLifetime()方法, 您可以使用它們來配置sql.DB的行為并改變其性能。

10余年的平邑網(wǎng)站建設經(jīng)驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設備顯示端的尺寸不同,自動調(diào)整平邑建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“平邑網(wǎng)站設計”,“平邑網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。

轉(zhuǎn)自:

整理:go語言中文文檔:

在本文我將詳細解釋這些設置的作用,并說明它們所能產(chǎn)生的(積極和消極)影響。

一個sql.DB對象就是一個數(shù)據(jù)庫連接池,它包含“正在用”和“空閑的”連接。一個正在用的連接指的是,你正用它來執(zhí)行數(shù)據(jù)庫任務,例如執(zhí)行SQL語句或行查詢。當任務完成連接就是空閑的。

當您創(chuàng)建sql.DB執(zhí)行數(shù)據(jù)庫任務時,它將首先檢查連接池中是否有可用的空閑連接。如果有可用的連接,那么Go將重用現(xiàn)有連接,并在執(zhí)行任務期間將其標記為正在使用。如果池中沒有空閑連接,而您需要一個空閑連接,那么Go將創(chuàng)建一個新的連接。

默認情況下,在同一時間打開連接的數(shù)量是沒有限制(包含使用中+空閑)。但你可以通過SetMaxOpenConns()方法實現(xiàn)自定義限制,如下所示:

在這個示例代碼中,連接池現(xiàn)在有5個并發(fā)打開的連接數(shù)。如果所有5個連接都已經(jīng)被標記為正在使用,并且需要另一個新的連接,那么應用程序?qū)⒈黄鹊却?,直?個連接中的一個被釋放并變?yōu)榭臻e。

為了說明更改MaxOpenConns的影響,我運行了一個基準測試,將最大打開連接數(shù)設置為1、2、5、10和無限。基準測試在PostgreSQL數(shù)據(jù)庫上執(zhí)行并行的INSERT語句,您可以在這里找到代碼。測試結(jié)果:

對于這個基準測試,我們可以看到,允許打開的連接越多,在數(shù)據(jù)庫上執(zhí)行INSERT操作所花費的時間就越少(打開的連接數(shù)為1時,執(zhí)行速度3129633ns/op,而無限連接:531030ns/op——大約快了6倍)。這是因為允許打開的連接越多,可以并發(fā)執(zhí)行的數(shù)據(jù)庫查詢就越多。

默認情況下,sql.DB允許連接池中最多保留2個空閑連接。你可以通過SetMaxIdleConns()方法改變它,如下所示:

從理論上講,允許池中有更多的空閑連接將提高性能,因為這樣就不太可能從頭開始建立新連接——因此有助于提升數(shù)據(jù)庫性能。

讓我們來看看相同的基準測試,最大空閑連接設置為none, 1,2,5和10:

當MaxIdleConns設置為none時,必須為每個INSERT從頭創(chuàng)建一個新的連接,我們可以從基準測試中看到,平均運行時和內(nèi)存使用量相對較高。

只允許保留和重用一個空閑連接對基準測試影響特別明顯——它將平均運行時間減少了大約8倍,內(nèi)存使用量減少了大約20倍。繼續(xù)增加空閑連接池的大小會使性能變得更好,盡管改進并不明顯。

那么,您應該維護一個大的空閑連接池嗎?答案取決于應用程序。重要的是要意識到保持空閑連接是有代價的—它占用了可以用于應用程序和數(shù)據(jù)庫的內(nèi)存。

還有一種可能是,如果一個連接空閑時間太長,那么它可能會變得不可用。例如,MySQL的wait_timeout設置將自動關(guān)閉任何8小時(默認)內(nèi)未使用的連接。

當發(fā)生這種情況時,sql.DB會優(yōu)雅地處理它。壞連接將自動重試兩次,然后放棄,此時Go將該連接從連接池中刪除,并創(chuàng)建一個新的連接。因此,將MaxIdleConns設置得太大可能會導致連接變得不可用,與空閑連接池更小(使用更頻繁的連接更少)相比,會占有更多的資源。所以,如果你很可能很快就會再次使用,你只需保持一個空閑的連接。

最后要指出的是,MaxIdleConns應該總是小于或等于MaxOpenConns。Go強制執(zhí)行此操作,并在必要時自動減少MaxIdleConns。

現(xiàn)在讓我們看看SetConnMaxLifetime()方法,它設置連接可重用的最大時間長度。如果您的SQL數(shù)據(jù)庫也實現(xiàn)了最大連接生命周期,或者—例如—您希望方便地在負載均衡器后交換數(shù)據(jù)庫,那么這將非常有用。

你可以這樣使用它:

在這個例子中,所有的連接都將在創(chuàng)建后1小時“過期”,并且在過期后無法重用。但注意:

從理論上講,ConnMaxLifetime越短,連接過期的頻率就越高——因此,需要從頭創(chuàng)建連接的頻率就越高。為了說明這一點,我運行了將ConnMaxLifetime設置為100ms、200ms、500ms、1000ms和無限(永遠重用)的基準測試,默認設置為無限打開連接和2個空閑連接。這些時間段顯然比您在大多數(shù)應用程序中使用的時間要短得多,但它們有助于很好地說明行為。

在這些特定的基準測試中,我們可以看到,與無限生存期相比,在100ms生存期時內(nèi)存使用量增加了3倍以上,而且每個INSERT的平均運行時也稍微長一些。

如果您在代碼中設置了ConnMaxLifetime,那么一定要記住連接將過期(隨后重新創(chuàng)建)的頻率。例如,如果您總共有100個連接,而ConnMaxLifetime為1分鐘,那么您的應用程序可能每秒鐘殺死和重新創(chuàng)建1.67個連接(平均值)。您不希望這個頻率太大,最終會阻礙性能,而不是提高性能。

最后,如果不說明超過數(shù)據(jù)庫連接數(shù)量的硬限制將會發(fā)生什么,那么本文就不完整了。 為了說明這一點,我將修改postgresql.conf文件,這樣總共只允許5個連接(默認是100個)…

然后在無限連接的情況下重新運行基準測試……

一旦達到5個連接的硬限制,數(shù)據(jù)庫驅(qū)動程序(pq)立即返回一個太多客戶端連接的錯誤消息,而無法完成INSERT。為了防止這個錯誤,我們需要將sql.DB中打開連接的最大總數(shù)(正在使用的+空閑的)設置為低于5。像這樣:

現(xiàn)在,sql.DB在任何時候最多只能創(chuàng)建3個連接,基準測試運行時應該不會出現(xiàn)任何錯誤。但是這樣做需要注意:當達到開放連接數(shù)限制,并且所有連接都在使用時,應用程序需要執(zhí)行的任何新的數(shù)據(jù)庫任務都將被迫等待,直到連接標記為空閑。例如,在web應用程序的上下文中,用戶的HTTP請求看起來會“掛起”,甚至在等待數(shù)據(jù)庫任務運行時可能會超時。

為了減輕這種情況,你應該始終在一個上下文中傳遞。在調(diào)用數(shù)據(jù)庫時,啟用上下文的方法(如ExecContext()),使用固定的、快速的超時上下文對象。

總結(jié)

1、根據(jù)經(jīng)驗,應該顯式設置MaxOpenConns值。這應該小于數(shù)據(jù)庫和基礎設施對連接數(shù)量的硬性限制。

2、一般來說,更高的MaxOpenConns和MaxIdleConns值將帶來更好的性能。但你應該注意到效果是遞減的,連接池空閑連接太多(連接沒有被重用,最終會變壞)實際上會導致性能下降。

3、為了降低上面第2點帶來的風險,您可能需要設置一個相對較短的ConnMaxLifetime。但你也不希望它太短,導致連接被殺死或不必要地頻繁重建。

4、MaxIdleConns應該總是小于或等于MaxOpenConns。

對于中小型web應用程序,我通常使用以下設置作為起點,然后根據(jù)實際吞吐量水平的負載測試結(jié)果進行優(yōu)化。

GO語言運行32位

第一種

1.使用go env命令,查看系統(tǒng)的配置環(huán)境,可以看到GOARCH(當前系統(tǒng))是amd64

2.執(zhí)行 set GOARCH=386 配置go輸出系統(tǒng)平臺為32位,此時再用go env命令查看系統(tǒng)的配置環(huán)境,如圖:

第二種

打開Run Edit Configurations Configuration標簽

為Environment添加兩個設置項

參考

ubuntu下怎么配置go語言開發(fā)環(huán)境

具體步驟:

1、去官網(wǎng)下載go1.1.2的tarball,一般下載到tem目錄

2、打開終端cd /usr/local, tar -zxvf go1.1.2.linux-386.tar.gz

將源碼文件解壓縮到/usr/local目錄,如果解壓到其他目錄,需要自己設置GOROOT

3、安裝gcc工具,因為golang有些功能是使用c寫

sudo apt-get install bison gawk gcc libc6-dev make

4、$ cd go/src,$ ./all.bash

運行bash腳本,如果運行正常會獲得你的操作系統(tǒng)和cpu信息,自動編譯安裝

5、將export PATH=$PATH:/usr/local/go/bin 寫入$HOME/.profile

最后進行測試輸入go version 會顯示go1.1.2 linux/386

Go語言安裝與鏡像配置

安裝網(wǎng)址

國內(nèi)鏡像

Go 1.13 及以上(推薦

打開你的終端并執(zhí)行

macOS 或 Linux

如果是zsh

請這樣設置

Windows

打開PowerShell 并執(zhí)行

或者

然后你就可以

怎么用notepad++配置go語言開發(fā)環(huán)境

怎么用notepad++配置go語言開發(fā)環(huán)境

1、下載go的zip文件。并且一定要把文件解壓到c:\go目錄下。

2、配置windows的高級環(huán)境變量。包括:GOROOT、GOOS、GOBIN、GOARCH。并且在path變量里面把c:\go\bin加入。以便可以在命令行直接運行g(shù)o命令。

舉例:我的機器:

GOPATH= c:\go;c:\go\src;F:\workspace\goSample01;

GOBIN=c:\go\bin;F:\workspace\goSample01\bin;

其中,c:\go是go的安裝路徑;

F:\workspace\goSample01是我寫的go語言項目的工程目錄;

F:\workspace\goSample01\bin是go語言項目的工程目錄下的可執(zhí)行文件路徑;

3、在完成環(huán)境變量配置后,打開一個命令行窗口,直接輸入go,然后回車,看看是否出現(xiàn)go的幫助信息。如果出現(xiàn),那么go的基本環(huán)境就OK了。

注意:這個基本環(huán)境不包含開發(fā)工具,也不能直接編譯帶C代碼的go程序。

如何配置go語言開發(fā)環(huán)境

1.1 Go 安裝

Go的三種安裝方式

Go有多種安裝方式,你可以選擇自己喜歡的。這里我們介紹三種最常見的安裝方式:

Go源碼安裝:這是一種標準的軟件安裝方式。對于經(jīng)常使用Unix類系統(tǒng)的用戶,尤其對于開發(fā)者來說,從源碼安裝可以自己定制。

Go標準包安裝:Go提供了方便的安裝包,支持Windows、Linux、Mac等系統(tǒng)。這種方式適合快速安裝,可根據(jù)自己的系統(tǒng)位數(shù)下載好相應的安裝包,一路next就可以輕松安裝了。**推薦這種方式**

第三方工具安裝:目前有很多方便的第三方軟件包工具,例如Ubuntu的apt-get、Mac的homebrew等。這種安裝方式適合那些熟悉相應系統(tǒng)的用戶。

最后,如果你想在同一個系統(tǒng)中安裝多個版本的Go,你可以參考第三方工具GVM,這是目前在這方面做得最好的工具,除非你知道怎么處理。

Go源碼安裝

在Go的源代碼中,有些部分是用Plan 9 C和ATT匯編寫的,因此假如你要想從源碼安裝,就必須安裝C的編譯工具。

在Mac系統(tǒng)中,只要你安裝了Xcode,就已經(jīng)包含了相應的編譯工具。

在類Unix系統(tǒng)中,需要安裝gcc等工具。例如Ubuntu系統(tǒng)可通過在終端中執(zhí)行sudo apt-get install gcc

libc6-dev來安裝編譯工具。

在Windows系統(tǒng)中,你需要安裝MinGW,然后通過MinGW安裝gcc,并設置相應的環(huán)境變量。

你可以直接去官網(wǎng)下載源碼,找相應的goVERSION.src.tar.gz的文件下載,下載之后解壓縮到$HOME目錄,執(zhí)行如下代碼:

cd go/src

./all.bash

運行all.bash后出現(xiàn)"ALL TESTS PASSED"字樣時才算安裝成功。

上面是Unix風格的命令,Windows下的安裝方式類似,只不過是運行all.bat,調(diào)用的編譯器是MinGW的gcc。

如果是Mac或者Unix用戶需要設置幾個環(huán)境變量,如果想重啟之后也能生效的話把下面的命令寫到.bashrc或者.zshrc里面,

export GOPATH=$HOME/gopath

export PATH=$PATH:$HOME/go/bin:$GOPATH/bin

如果你是寫入文件的,記得執(zhí)行bash .bashrc或者bash

.zshrc使得設置立馬生效。

如果是window系統(tǒng),就需要設置環(huán)境變量,在path里面增加相應的go所在的目錄,設置gopath變量。

當你設置完畢之后在命令行里面輸入go,看到如下圖片即說明你已經(jīng)安裝成功

圖1.1 源碼安裝之后執(zhí)行Go命令的圖

如果出現(xiàn)Go的Usage信息,那么說明Go已經(jīng)安裝成功了;如果出現(xiàn)該命令不存在,那么可以檢查一下自己的PATH環(huán)境變中是否包含了Go的安裝目錄。

關(guān)于上面的GOPATH將在下面小節(jié)詳細講解

Go標準包安裝

Go提供了每個平臺打好包的一鍵安裝,這些包默認會安裝到如下目錄:/usr/local/go

(Windows系統(tǒng):c:\Go),當然你可以改變他們的安裝位置,但是改變之后你必須在你的環(huán)境變量中設置如下信息:

export GOROOT=$HOME/go

export GOPATH=$HOME/gopath

export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

上面這些命令對于Mac和Unix用戶來說最好是寫入.bashrc或者.zshrc文件,對于windows用戶來說當然是寫入環(huán)境變量。

如何判斷自己的操作系統(tǒng)是32位還是64位?

我們接下來的Go安裝需要判斷操作系統(tǒng)的位數(shù),所以這小節(jié)我們先確定自己的系統(tǒng)類型。

Windows系統(tǒng)用戶請按Win+R運行cmd,輸入systeminfo后回車,稍等片刻,會出現(xiàn)一些系統(tǒng)信息。在“系統(tǒng)類型”一行中,若顯示“x64-based

PC”,即為64位系統(tǒng);若顯示“X86-based PC”,則為32位系統(tǒng)。

Mac系統(tǒng)用戶建議直接使用64位的,因為Go所支持的Mac OS X版本已經(jīng)不支持純32位處理器了。

Linux系統(tǒng)用戶可通過在Terminal中執(zhí)行命令arch(即uname

-m)來查看系統(tǒng)信息:

64位系統(tǒng)顯示

x86_64

32位系統(tǒng)顯示

i386

Mac 安裝

訪問下載地址,32位系統(tǒng)下載go1.4.2.darwin-386-osx10.8.pkg,64位系統(tǒng)下載go1.4.2.darwin-amd64-osx10.8.pkg,雙擊下載文件,一路默認安裝點擊下一步,這個時候go已經(jīng)安裝到你的系統(tǒng)中,默認已經(jīng)在PATH中增加了相應的~/go/bin,這個時候打開終端,輸入go

看到類似上面源碼安裝成功的圖片說明已經(jīng)安裝成功

如果出現(xiàn)go的Usage信息,那么說明go已經(jīng)安裝成功了;如果出現(xiàn)該命令不存在,那么可以檢查一下自己的PATH環(huán)境變中是否包含了go的安裝目錄。

Linux 安裝

訪問下載地址,32位系統(tǒng)下載go1.4.2.linux-386.tar.gz,64位系統(tǒng)下載go1.4.2.linux-amd64.tar.gz,

假定你想要安裝Go的目錄為 $GO_INSTALL_DIR,后面替換為相應的目錄路徑。

解壓縮tar.gz包到安裝目錄下:tar zxvf go1.4.2.linux-amd64.tar.gz -C

$GO_INSTALL_DIR。

設置PATH,export PATH=$PATH:$GO_INSTALL_DIR/go/bin

然后執(zhí)行g(shù)o

圖1.2 Linux系統(tǒng)下安裝成功之后執(zhí)行g(shù)o顯示的信息

如果出現(xiàn)go的Usage信息,那么說明go已經(jīng)安裝成功了;如果出現(xiàn)該命令不存在,那么可以檢查一下自己的PATH環(huán)境變中是否包含了go的安裝目錄。

Windows 安裝

訪問Google Code 下載頁,32

位請選擇名稱中包含 windows-386 的 msi 安裝包,64 位請選擇名稱中包含 windows-amd64 的。下載好后運行,不要修改默認安裝目錄

C:\Go\,若安裝到其他位置會導致不能執(zhí)行自己所編寫的 Go 代碼。安裝完成后默認會在環(huán)境變量 Path 后添加 Go 安裝目錄下的 bin 目錄

C:\Go\bin\,并添加環(huán)境變量 GOROOT,值為 Go 安裝根目錄 C:\Go\ 。

驗證是否安裝成功

在運行中輸入 cmd 打開命令行工具,在提示符下輸入 go,檢查是否能看到 Usage 信息。輸入

cd %GOROOT%,看是否能進入 Go 安裝目錄。若都成功,說明安裝成功。

不能的話請檢查上述環(huán)境變量 Path 和 GOROOT 的值。若不存在請卸載后重新安裝,存在請重啟計算機后重試以上步驟。

第三方工具安裝

GVM

gvm是第三方開發(fā)的Go多版本管理工具,類似ruby里面的rvm工具。使用起來相當?shù)姆奖?,安裝gvm使用如下命令:

bash (curl -s -S -L )

安裝完成后我們就可以安裝go了:

gvm install go1.4.2

gvm use go1.4.2

也可以使用下面的命令,省去每次調(diào)用gvm use的麻煩: gvm use go1.4.2 --default

執(zhí)行完上面的命令之后GOPATH、GOROOT等環(huán)境變量會自動設置好,這樣就可以直接使用了。

apt-get

Ubuntu是目前使用最多的Linux桌面系統(tǒng),使用apt-get命令來管理軟件包,我們可以通過下面的命令來安裝Go,為了以后方便,應該把

git mercurial 也安裝上:

sudo apt-get install python-software-properties

sudo add-apt-repository ppa:gophers/go

sudo apt-get update

sudo apt-get install golang-stable git-core mercurial

homebrew

homebrew是Mac系統(tǒng)下面目前使用最多的管理軟件的工具,目前已支持Go,可以通過命令直接安裝Go,為了以后方便,應該把

git mercurial 也安裝上:

brew update brew upgrade

brew install go

brew install git

brew install mercurial

名稱欄目:go語言運行配置 go語言 運行
鏈接地址:http://muchs.cn/article46/doocseg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、標簽優(yōu)化網(wǎng)站策劃、品牌網(wǎng)站設計、定制開發(fā)商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設