首先需要下載下載go平臺安裝包
創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供佛山網(wǎng)站建設(shè)、佛山做網(wǎng)站、佛山網(wǎng)站設(shè)計、佛山網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、佛山企業(yè)網(wǎng)站模板建站服務(wù),十載佛山做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
安裝程序 下載地址址h如果是您的系統(tǒng)是windows32 位系統(tǒng)請選擇go1.3.3.windows-386.msi即可,其他的,請按照自己所需版本來進行下載,如下圖所示:
安裝以及配置環(huán)境變量
由于Windows下的的安裝包有兩種:msi和zip的;zip的是免安裝的,解壓在配置一些環(huán)境變量之后就可以使用,msi的則是安裝包版本的,安裝的時候會設(shè)置好對應(yīng)的環(huán)境變量。我的電腦是Win7 64位,因為方便,就下載了下面的版本。下好安裝包后,安裝過程就很簡單了,一路“Next”就好了。 雖然msi會自動配置一些環(huán)境變量,但是本人在安裝完之后還是自己配置了環(huán)境變量,所以在安裝完Go之后,我們最好還是檢查一些所有的環(huán)境變量是否正常。主要的環(huán)境變量有以下幾個:
GOROOT:Go的安裝目錄
GOPATH:用于存放Go語言Package的目錄,這個目錄不能在Go的安裝目錄中
GOBIN:Go二進制文件存放目錄,寫成%GOROOT%\bin就好
GOOS:操作系統(tǒng)
GOARCH:指定系統(tǒng)環(huán)境,i386表示x86,amd64表示x64
PATH:需要將%GOBIN%加在PATH變量的最后,方便在命令行下運行Go
如下圖所示:
像我自己安裝的,下載完成之后解壓到任意目錄(所有目錄均不能使用中文):D:\Go;
然后是go環(huán)境變量的配置:
GOARCH:386(go安裝版本)
GOBIN:D:\Go\bin(exe執(zhí)行文件路徑)
GOOS:windows(go運行的系統(tǒng))
GOROOT:D:\Go(go的解壓路徑)
GOPATH:E:\go\data(go的工具包路徑,隨意指定,后面會用到)
然后在path環(huán)境變量中追加:;%GOBIN%
完成之后在cmd窗口輸入:go version,如下圖所示:
1.1 Go 安裝
Go的三種安裝方式
Go有多種安裝方式,你可以選擇自己喜歡的。這里我們介紹三種最常見的安裝方式:
Go源碼安裝:這是一種標準的軟件安裝方式。對于經(jīng)常使用Unix類系統(tǒng)的用戶,尤其對于開發(fā)者來說,從源碼安裝可以自己定制。
Go標準包安裝:Go提供了方便的安裝包,支持Windows、Linux、Mac等系統(tǒng)。這種方式適合快速安裝,可根據(jù)自己的系統(tǒng)位數(shù)下載好相應(yīng)的安裝包,一路next就可以輕松安裝了。**推薦這種方式**
第三方工具安裝:目前有很多方便的第三方軟件包工具,例如Ubuntu的apt-get、Mac的homebrew等。這種安裝方式適合那些熟悉相應(yīng)系統(tǒng)的用戶。
最后,如果你想在同一個系統(tǒng)中安裝多個版本的Go,你可以參考第三方工具GVM,這是目前在這方面做得最好的工具,除非你知道怎么處理。
Go源碼安裝
在Go的源代碼中,有些部分是用Plan 9 C和ATT匯編寫的,因此假如你要想從源碼安裝,就必須安裝C的編譯工具。
在Mac系統(tǒng)中,只要你安裝了Xcode,就已經(jīng)包含了相應(yīng)的編譯工具。
在類Unix系統(tǒng)中,需要安裝gcc等工具。例如Ubuntu系統(tǒng)可通過在終端中執(zhí)行sudo apt-get install gcc
libc6-dev來安裝編譯工具。
在Windows系統(tǒng)中,你需要安裝MinGW,然后通過MinGW安裝gcc,并設(shè)置相應(yīng)的環(huán)境變量。
你可以直接去官網(wǎng)下載源碼,找相應(yī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用戶需要設(shè)置幾個環(huán)境變量,如果想重啟之后也能生效的話把下面的命令寫到.bashrc或者.zshrc里面,
export GOPATH=$HOME/gopath
export PATH=$PATH:$HOME/go/bin:$GOPATH/bin
如果你是寫入文件的,記得執(zhí)行bash .bashrc或者bash
.zshrc使得設(shè)置立馬生效。
如果是window系統(tǒng),就需要設(shè)置環(huán)境變量,在path里面增加相應(yīng)的go所在的目錄,設(shè)置gopath變量。
當你設(shè)置完畢之后在命令行里面輸入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)境變量中設(shè)置如下信息:
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中增加了相應(yīng)的~/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,后面替換為相應(yīng)的目錄路徑。
解壓縮tar.gz包到安裝目錄下:tar zxvf go1.4.2.linux-amd64.tar.gz -C
$GO_INSTALL_DIR。
設(shè)置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)境變量會自動設(shè)置好,這樣就可以直接使用了。
apt-get
Ubuntu是目前使用最多的Linux桌面系統(tǒng),使用apt-get命令來管理軟件包,我們可以通過下面的命令來安裝Go,為了以后方便,應(yīng)該把
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,為了以后方便,應(yīng)該把
git mercurial 也安裝上:
brew update brew upgrade
brew install go
brew install git
brew install mercurial
為了配置Go語言開發(fā)環(huán)境,折騰了半天,下IDE(Sublime Text,IntelliJ Idea),然后裝Go插件。裝Go插件還要下載插件項目源碼,編譯等等,Sublime還要輸入python腳本,粘進去通不過,頭疼。
突然悟出一個道理,如果你覺得當前手上的事情變得非常痛苦的時候,不是事情本身的問題,是你沒找到好的解決方法的問題,或者說,“不是事情太痛苦,是你太笨了”。
在不停的裝插件,嘗試過程中,突然發(fā)現(xiàn),PyCharm跟Idea一樣,也是支持Go插件的,立馬悟到,PyCharm可以開發(fā)GO,要Idea干毛。再一想,PyCharm和Idea都是IntelliJ的產(chǎn)品,支持應(yīng)該不會差,于是果斷放棄Idea。PyCharm搭建GO開發(fā)環(huán)境其實并不是太難,咳咳,主要自己沒弄清楚GOROOT和GOPATH的配置和使用走了彎路,特意記錄這次過程。細致介紹,造福大眾?。üP者是windows環(huán)境,linux、MAC OS大同小異)GOPATH是go的項目目錄,就是接下來寫程序的目錄,我放在E:\GoProjects,在系統(tǒng)變量方框中,新建GORATH變量:cmd 命令窗口輸入go version查看安轉(zhuǎn)go的版本,在輸入go env可以查看所有環(huán)境配置信息,重點關(guān)注我們手動配置的信息:進入到插件搜索界面,在輸入框中輸入go,選擇第二項安轉(zhuǎn),安轉(zhuǎn)有點久,可能會失敗,多試幾次就OK。采用了MTV的框架模式,即模型M,視圖V和模版T。它最初是被開發(fā)來用于管理勞倫斯出版集團旗下的一些以新聞內(nèi)容為主的網(wǎng)站的,即是CMS(內(nèi)容管理系統(tǒng))軟件。并于2005年7月在BSD許可證下發(fā)布。這套框架是以比利時的吉普賽爵士吉他手Django Reinhardt來命名的。你可以這樣做,打開你的Pycharm編譯器,然后點擊左上角的 File - Close Project
Consul是由HashiCorp基于Go語言開發(fā)的支持多數(shù)據(jù)中心的分布式高可用服務(wù)發(fā)布和注冊軟件, 采用Raft算法保持服務(wù)的一致性, 且支持健康檢查.
和Eureka的侵入式服務(wù)中心不同的是, Consul是以獨立的軟件形式運行, 對項目侵入性小, 更方便部署.
上圖為多機房數(shù)據(jù)中心部署, 每個數(shù)據(jù)中心至少三臺Consul, 一臺LEADER, 另外的兩臺是FOLLOWER.
代理是Consul集群上每個成員的守護進程, 它是由consul agent命令開始運行. 代理能夠以客戶端或服務(wù)器模式運行. 由于所有節(jié)點都必須運行代理, 所以將節(jié)點引用為客戶端或服務(wù)器更為簡單, 但還有其他實例的代理. 所有代理可以運行DNS或HTTP接口, 并負責運行檢查和保持服務(wù)同步.
客戶端可以將所有RPC請求轉(zhuǎn)發(fā)到服務(wù)器的代理. 客戶端是相對無狀態(tài)的. 客戶端執(zhí)行的唯一后臺活動是LANgossip池. 它消耗最小的資源開銷和少量的網(wǎng)絡(luò)帶寬.
服務(wù)器端是具有擴展的功能的代理, 它主要參與維護集群狀態(tài), 響應(yīng)RPC查詢, 與其他數(shù)據(jù)中心交換WAN gossip, 以及向leader節(jié)點或遠程數(shù)據(jù)中心轉(zhuǎn)發(fā)查詢.
雖然數(shù)據(jù)中心的定義似乎很明顯, 但仍有一些細微的細節(jié)必須考慮. 比如說, 在EC2中, 多個可用中心 (EC2和AZ是AWS里的概念, 不了解的話可以去看看AWS文檔) 是否應(yīng)該被認為是一個單個的數(shù)據(jù)中心呢? 我們將一個數(shù)據(jù)中心定義為一個私有, 低延遲和高帶寬的網(wǎng)絡(luò)環(huán)境, 這不包括通過公共互聯(lián)網(wǎng)的通信. 但是為了我們的目的, 單個EC2區(qū)域內(nèi)的多個可用區(qū)域?qū)⒈灰暈閱蝹€數(shù)據(jù)中心的一部分.
在我們的文檔中, "一致性"的意思是對于被選舉出的leader以及事物的順序的認同. 因為這些事件被應(yīng)用到有限狀態(tài)機上, 我們對一致性的定義又暗含了復(fù)制備份的狀態(tài)機的一致性.
consul是建立在Serf之上的, 它提供了一個完整的gossip協(xié)議, 用在很多地方. Serf提供了成員管理, 故障檢測和事件廣播的功能. Gossip的節(jié)點到節(jié)點之間的通信使用了UDP協(xié)議.
指在同一局域網(wǎng)或數(shù)據(jù)中心的節(jié)點上的LAN Gossip池. Client到Server會通過Lan Gossip, 所有的節(jié)點都在Gossip pool中
指包含服務(wù)器的WAN Gossip池, 這些服務(wù)器在不同的數(shù)據(jù)中心, 通過網(wǎng)絡(luò)進行通信.
以開發(fā)模式啟動: consul agent -dev, 如果需要Web界面的話加-ui即可, 集群的LAN服務(wù)默認啟動在8301端口上, WAN服務(wù)默認啟動在8302端口上, Web服務(wù)默認端口是8500, DNS服務(wù)默認端口是8600, gRPC服務(wù)默認端口是8502
默認是以server角色啟動的, 啟動后用consul members可以查看服務(wù)下的節(jié)點信息, 或者通過HTTP接口請求 也可以看到節(jié)點信息數(shù)據(jù)以json形式返回.
使用dig命令可以查看consul中DNS服務(wù)的一些信息, 命令如: dig @127.0.0.1 -p 8600 nodeName
一般情況下consul會在啟動時通過參數(shù)的形式進行配置, 但這樣子比較麻煩, 我們通過在/etc/consul.d目錄下來新建配置文件的形式, 在每次啟動時加載配置文件來進行啟動.
consul的配置信息可以在 查看, 其中部分選項如下:
按照慣例, 我們將配置文件放在/etc/consul.d/目錄下, 分別在幾個機器上創(chuàng)建該目錄. 在以bootstrap模式啟動的server1上, 我們創(chuàng)建/etc/consul.d/bootstrap和/etc/consul.d/server目錄, 在server2和server3上我們創(chuàng)建/etc/consul.d/server目錄, 在agent上, 我們創(chuàng)建/etc/consul.d/agent目錄.
server1的bootstrap目錄下的配置文件config.json如下:
其他兩臺服務(wù)器中server目錄下的配置文件config.json如下:
代理服務(wù)器中agent目錄下的config.json如下:
這樣, 首先啟動server1上的consul: consul agent -config-dir /etc/consul.d/bootstrap, 然后依次啟動server2, server3上的consul:consul agent -config-dir /etc/consul.d/server. 這樣, 三個consul server就組成了一個cluster. 此時server1上的consul運行在bootstrap狀態(tài)下. 可以在不與server2以及server3商議的情況下直接執(zhí)行決議, 此時我們終結(jié)server1上運行的consul, 并執(zhí)行consul agent -config-dir /etc/consul.d/server, 讓server1以普通server的身份重新加入cluster. 最后啟動agent模式 consul agent -config-dir /etc/consul.d/agent.
** 注意: encrypt可以使用consul keygen命令來生成, 所有服務(wù)器上需要配置一樣, 如果因為哪里配置錯誤導致啟動失敗, 修改后還報失敗的話, 可以嘗試刪除$data_dir/serf/local.keyring后重新啟動 **
在需要部署服務(wù)的機器上同樣創(chuàng)建/etc/consul.d/, 然后把不同的服務(wù)分開不同的目錄, 或者就直接在此目錄下創(chuàng)建json配置文件, 如: web1.json, web2.json等.
然后再通過consul agent指定配置文件的方式啟動服務(wù), 可以直接在配置文件中指定要注冊的服務(wù), 也可以在啟動后使用consul join命令來主動注冊服務(wù), 這樣再次登錄到web管理界面就可以發(fā)現(xiàn)我們新建的服務(wù)了.
Q: 什么是bootstrap模式?
A: 使用該模式啟動的server端會自動把自己選擇為leader, 在搭建集群時為了方便會預(yù)先設(shè)置一臺服務(wù)器為bootstrap啟動