1.1 Go 安裝
宜賓網站制作公司哪家好,找成都創新互聯!從網頁設計、網站建設、微信開發、APP開發、成都響應式網站建設公司等網站項目制作,到程序開發,運營維護。成都創新互聯2013年開創至今到現在10年的時間,我們擁有了豐富的建站經驗和運維經驗,來保證我們的工作的順利進行。專注于網站建設就選成都創新互聯。
Go的三種安裝方式
Go有多種安裝方式,你可以選擇自己喜歡的。這里我們介紹三種最常見的安裝方式:
Go源碼安裝:這是一種標準的軟件安裝方式。對于經常使用Unix類系統的用戶,尤其對于開發者來說,從源碼安裝可以自己定制。
Go標準包安裝:Go提供了方便的安裝包,支持Windows、Linux、Mac等系統。這種方式適合快速安裝,可根據自己的系統位數下載好相應的安裝包,一路next就可以輕松安裝了。**推薦這種方式**
第三方工具安裝:目前有很多方便的第三方軟件包工具,例如Ubuntu的apt-get、Mac的homebrew等。這種安裝方式適合那些熟悉相應系統的用戶。
最后,如果你想在同一個系統中安裝多個版本的Go,你可以參考第三方工具GVM,這是目前在這方面做得最好的工具,除非你知道怎么處理。
Go源碼安裝
在Go的源代碼中,有些部分是用Plan 9 C和ATT匯編寫的,因此假如你要想從源碼安裝,就必須安裝C的編譯工具。
在Mac系統中,只要你安裝了Xcode,就已經包含了相應的編譯工具。
在類Unix系統中,需要安裝gcc等工具。例如Ubuntu系統可通過在終端中執行sudo apt-get install gcc
libc6-dev來安裝編譯工具。
在Windows系統中,你需要安裝MinGW,然后通過MinGW安裝gcc,并設置相應的環境變量。
你可以直接去官網下載源碼,找相應的goVERSION.src.tar.gz的文件下載,下載之后解壓縮到$HOME目錄,執行如下代碼:
cd go/src
./all.bash
運行all.bash后出現"ALL TESTS PASSED"字樣時才算安裝成功。
上面是Unix風格的命令,Windows下的安裝方式類似,只不過是運行all.bat,調用的編譯器是MinGW的gcc。
如果是Mac或者Unix用戶需要設置幾個環境變量,如果想重啟之后也能生效的話把下面的命令寫到.bashrc或者.zshrc里面,
export GOPATH=$HOME/gopath
export PATH=$PATH:$HOME/go/bin:$GOPATH/bin
如果你是寫入文件的,記得執行bash .bashrc或者bash
.zshrc使得設置立馬生效。
如果是window系統,就需要設置環境變量,在path里面增加相應的go所在的目錄,設置gopath變量。
當你設置完畢之后在命令行里面輸入go,看到如下圖片即說明你已經安裝成功
圖1.1 源碼安裝之后執行Go命令的圖
如果出現Go的Usage信息,那么說明Go已經安裝成功了;如果出現該命令不存在,那么可以檢查一下自己的PATH環境變中是否包含了Go的安裝目錄。
關于上面的GOPATH將在下面小節詳細講解
Go標準包安裝
Go提供了每個平臺打好包的一鍵安裝,這些包默認會安裝到如下目錄:/usr/local/go
(Windows系統:c:\Go),當然你可以改變他們的安裝位置,但是改變之后你必須在你的環境變量中設置如下信息:
export GOROOT=$HOME/go
export GOPATH=$HOME/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
上面這些命令對于Mac和Unix用戶來說最好是寫入.bashrc或者.zshrc文件,對于windows用戶來說當然是寫入環境變量。
如何判斷自己的操作系統是32位還是64位?
我們接下來的Go安裝需要判斷操作系統的位數,所以這小節我們先確定自己的系統類型。
Windows系統用戶請按Win+R運行cmd,輸入systeminfo后回車,稍等片刻,會出現一些系統信息。在“系統類型”一行中,若顯示“x64-based
PC”,即為64位系統;若顯示“X86-based PC”,則為32位系統。
Mac系統用戶建議直接使用64位的,因為Go所支持的Mac OS X版本已經不支持純32位處理器了。
Linux系統用戶可通過在Terminal中執行命令arch(即uname
-m)來查看系統信息:
64位系統顯示
x86_64
32位系統顯示
i386
Mac 安裝
訪問下載地址,32位系統下載go1.4.2.darwin-386-osx10.8.pkg,64位系統下載go1.4.2.darwin-amd64-osx10.8.pkg,雙擊下載文件,一路默認安裝點擊下一步,這個時候go已經安裝到你的系統中,默認已經在PATH中增加了相應的~/go/bin,這個時候打開終端,輸入go
看到類似上面源碼安裝成功的圖片說明已經安裝成功
如果出現go的Usage信息,那么說明go已經安裝成功了;如果出現該命令不存在,那么可以檢查一下自己的PATH環境變中是否包含了go的安裝目錄。
Linux 安裝
訪問下載地址,32位系統下載go1.4.2.linux-386.tar.gz,64位系統下載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
然后執行go
圖1.2 Linux系統下安裝成功之后執行go顯示的信息
如果出現go的Usage信息,那么說明go已經安裝成功了;如果出現該命令不存在,那么可以檢查一下自己的PATH環境變中是否包含了go的安裝目錄。
Windows 安裝
訪問Google Code 下載頁,32
位請選擇名稱中包含 windows-386 的 msi 安裝包,64 位請選擇名稱中包含 windows-amd64 的。下載好后運行,不要修改默認安裝目錄
C:\Go\,若安裝到其他位置會導致不能執行自己所編寫的 Go 代碼。安裝完成后默認會在環境變量 Path 后添加 Go 安裝目錄下的 bin 目錄
C:\Go\bin\,并添加環境變量 GOROOT,值為 Go 安裝根目錄 C:\Go\ 。
驗證是否安裝成功
在運行中輸入 cmd 打開命令行工具,在提示符下輸入 go,檢查是否能看到 Usage 信息。輸入
cd %GOROOT%,看是否能進入 Go 安裝目錄。若都成功,說明安裝成功。
不能的話請檢查上述環境變量 Path 和 GOROOT 的值。若不存在請卸載后重新安裝,存在請重啟計算機后重試以上步驟。
第三方工具安裝
GVM
gvm是第三方開發的Go多版本管理工具,類似ruby里面的rvm工具。使用起來相當的方便,安裝gvm使用如下命令:
bash (curl -s -S -L )
安裝完成后我們就可以安裝go了:
gvm install go1.4.2
gvm use go1.4.2
也可以使用下面的命令,省去每次調用gvm use的麻煩: gvm use go1.4.2 --default
執行完上面的命令之后GOPATH、GOROOT等環境變量會自動設置好,這樣就可以直接使用了。
apt-get
Ubuntu是目前使用最多的Linux桌面系統,使用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系統下面目前使用最多的管理軟件的工具,目前已支持Go,可以通過命令直接安裝Go,為了以后方便,應該把
git mercurial 也安裝上:
brew update brew upgrade
brew install go
brew install git
brew install mercurial
一、Go安裝使用
1、下載Go源碼包
上傳到/usr/local/src目錄下
2、編譯安裝Go到/usr/local
tar zxvf go1.6.3.linux-amd64.tar.gz -C /usr/local/
#注:必須使用root賬戶或者使用sudo來解壓縮Go源碼包
3、設置PATH環境變量,添加/usr/local/go/bin到環境變量
export PATH=$PATH:/usr/local/go/bin
4、安裝到自定義位置
Go二進制文件默認安裝到/usr/local/go,但是可以安裝Go工具到不同的位置,可以自行定義,只需要設置正確的環境變量。
例如,安裝Go到家目錄下,必須添加環境變量到$HOME/.profile
export GOROOT=$HOME/go
export PATH=$PATH:$GOROOT/bin
注:安裝Go到其他目錄時,GOROOT必須設置為環境變量
5、檢查是否正確安裝程序
通過設置一個工作區和建立一個簡單的程序,檢查是否正確安裝了一個簡單的程序。創建一個目錄包含您的工作空間,例如/data/work,并設置GOPATH環境變量指向的位置。
export GOPATH=/data/work
#如果不存在/data/work,需要新建
然后,在你的工作內創建src/github.com/user/hello,如果使用github,可以使用自己的用戶名代替user,在hello目錄下,新建hello.go
# cat hello.go
package main
import "fmt"
func main {
fmt.Printf("hello,world!\n")
}
#使用go編譯hello.go
go install github.com/user/hello
#上面的命令講名叫hello(or hello.exe)的程序放到你的工作區內,執行下面命令,會得到輸出結果。
$GOPATH/bin/hello
hello,world!
#當出現hello,world!表明Go已經安裝成功可以工作。
二、Go工作區介紹
1、機構組織代碼概述
Go語言程序通常將所有的代碼保存在一個工作區中。
工作區包含許多版本控制庫(由Git管理)。
每個存儲庫包含一個或多個包。
每個包由一個或多個在一個目錄中的源文件組成。
一個包的目錄的路徑決定其導入路徑。
注:同于其他的編程環境中,每一個項目都有一個獨立的工作區且工作區是緊密聯系在一起的版本控制庫。
2、工作區介紹
工作區是一個目錄層次結構,它的根目錄有三個目錄:
src 包含Go源文件
pkg 包含對象和包
bin 包含可執行命令
Go工具創建源碼包并安裝二進制文件到pkg和bin目錄下
src目錄通常包含多個版本控制庫(如Git或Mercurial),跟蹤一個或多個源包的開發。
下面展示一個好的工作區的例子:
bin/
hello # command executable
outyet # command executable
pkg/
linux_amd64/
github.com/golang/example/
stringutil.a # package object
src/
github.com/golang/example/
.git/ # Git repository metadata
hello/
hello.go # command source
outyet/
main.go # command source
main_test.go # test source
stringutil/
reverse.go # package source
reverse_test.go # test source
golang.org/x/image/
.git/ # Git repository metadata
bmp/
reader.go # package source
writer.go # package source
... (many more repositories and packages omitted) ...
上面的屬性圖展示了一個包含兩個存儲庫(example和image)的工作區,example 存儲庫包含兩個命令(hello,outyet),image庫包含bmp包和幾個其他的包。
一個典型的工作區包含包含許多軟件包和命令的多個源庫。大多數程序員將所有的源代碼和依賴關系保存在一個工作區中
3、GOPATH環境變量設置
GOPATH環境變量指定工作區的位置。它很可能是唯一的環境變量,代碼開發時需要設置。
開始,創建一個工作區目錄并設置相應的gopath。您的工作區可以位于任何你喜歡的地方,但我們將在這個文檔中使用/data/work。請注意,這不能是您的“Go安裝”路徑相同。
mkdir -p /data/work
export GOPATH=/data/work
為了方便。添加工作區的bin到PATH中
export PATH=$PATH:$GOPATH/bin
4、導入路徑
一個導入路徑是唯一標識一個包的字符串。一個包的導入路徑對應于它在工作區內或遠程存儲庫中的位置。
從標準庫的軟件包中給出了短的導入路徑等。對于您自己的包,您必須選擇不可能和未來添加到標準庫或其他外部庫的基礎路徑沖突的路徑。
注意,你不需要將你的代碼發布到一個遠程存儲庫之前,你可以建立它。這只是一個很好的習慣來組織你的代碼,如果你有一天會出版它。在實踐中,你可以選擇任何任意的路徑名稱,只要它是唯一的標準庫和更大的去生態系統。
我們將使用github.com/user作為我們的基本路徑。在您的工作區中創建一個目錄,以保持源代碼:
mkdir -p $GOPATH/src/github.com/user
5、第一個項目
編譯并運行一個簡單的程序,首先選擇一個包的路徑(我們將使用github.com/user/hello)和創建在您的工作區相應的軟件包目錄:
mkdir $GOPATH/src/github.com/user/hello
創建名叫hello.go的文件,上面創建過,此處略過。
cd $GOPATH/src/github.com/user/hello
go install
$GOPATH/bin/hello
或者:
hello
如果你使用的是一個源代碼管理系統,現在是一個很好的時間來初始化一個存儲庫,添加文件,并提交你的第一次更改。再次,這一步是可選的:您不需要使用源代碼管理來寫代碼。
cd $GOPATH/src/github.com/user/hello
git init
Initialized empty Git repository in /data/work/src/github.com/user/hello/.git/
git add hello.go
git commit -m "first commit"
[master (root-commit) bbfb477] first commit
6、first library
mkdir $GOPATH/src/github.com/user/stringutil
下一步,在目錄下創建一個名為reverse.go文件中有下列內容:
// Package stringutil contains utility functions for working with strings.
package stringutil
// Reverse returns its argument string reversed rune-wise left to right.
func Reverse(s string) string {
r := []rune(s)
for i, j := 0, len(r)-1; i len(r)/2; i, j = i+1, j-1 {
r[i], r[j] = r[j], r[i]
}
return string(r)
}
使用go build測試包的編譯
$ go build github.com/user/stringutil
如果當前位置源碼包目錄,只需要:
go build
上面操作并不會產生一個輸出文件,必須使用go install,把包和對象輸出到工作去的pkg目錄內
確認stringutil包創建完成后,修改原始hello.go,使用stringutil包:
package main
import (
"fmt"
"github.com/user/stringutil"
)
func main() {
fmt.Printf(stringutil.Reverse("\n !oG ,olleH"))
}
無論使用go安裝包還是二進制文件,所有相關的依賴都會自動安裝。所以當你安裝hello程序時:
$ go install github.com/user/hello
對應的stringutil包會自動安裝好。
執行新的hello程序,可以看到消息已經被反轉
# hello
Hello, Go!
完成上面操作之后,工作區應該為:
├── bin
│ └── hello # command executable
├── pkg
│ └── linux_amd64 # this will reflect your OS and architecture
│ └── github.com
│ └── user
│ └── stringutil.a # package object
└── src
└── github.com
└── user
├── hello
│ └── hello.go # command source
└── stringutil
└── reverse.go # package source
注意:go install會把庫文件stringutil.a放到pkg/linux_amd64下邊(目錄結構跟源代碼結構一樣)。這樣可以go命令可以直接找到對應的包對象,避免不必要的重復編譯。linux_amd64是為了根據操作系統和你的系統架構交叉編譯。
所有Go可執行程序都通過靜態方式鏈接在一起,所以在運行時是不需要相關的包對象(庫)。
7、包命令
所有的Go源代碼都以下面的語句開始:
package name
其中name就是包引用默認的名稱,一個包中的所有文件必須使用同一個包名,可執行命令必須是main。
一個二進制文件下所有的包名不需要唯一,但是引用路徑必須唯一
8、測試
Go自帶了一個輕量級的測試框架,由go test和testing包組成。
可以通過新建xx_test.go寫一個測試,其中包含若干個TestXXX函數。測試框架會自動執行這些函數;如果函數中包含tError或t.Fail, 對應的測試會被判為失敗。
添加一個針對stringutil的測試文件$GOPATH/src/github.com/user/stringutil/reverse_test.go,包含以下內容:
package stringutil
import "testing"
func TestReverse(t *testing.T) {
cases := []struct {
in, want string
}{
{"Hello, world", "dlrow ,olleH"},
{"Hello, 世界", "界世,olleH"},
{"", ""},
}
for _, c := range cases {
got := Reverse(c.in)
if got != c.want {
t.Errorf("Reverse(%q) == %q, want %q", c.in, got, c.want)
}
}
}
#通過go test測試
# go test github.com/user/stringutil
ok github.com/user/stringutil 0.002s
#同樣的,在包文件夾下可以忽略路徑而直接執行go test
[root@zabbix stringutil]# go test
PASS
ok github.com/user/stringutil 0.002s
9、遠程包
包的引用路徑用來描述如何通過版本控制系統獲取包的源代碼。go工具通過引用路徑自動從遠程代碼倉庫獲取包文件。比如本文中用的例子也對應的保存在github.com/golang/example下。go可以通過包的代碼倉庫的url直接獲取、生成、安裝對應的包。
[root@zabbix ~]# go get github.com/golang/example/hello
[root@zabbix ~]# $GOPATH/bin/hello
Hello, Go examples!
如果工作區中不存在對應的包,go會將對應的包放到GOPATH環境變量指明的工作區下。(如果包已經存在,go跳過代碼拉去而直接執行go install)
建議詳細看一下這個,有圖文
你在編譯器里面build一下,然后去\bin\debug目錄下找.exeexe就是可執行文件了。運行的時候可能需要用到debug目錄下的其他文件(如配置文件、dll等),所以需要把debug下的所有文件都放到一起。
具體步驟:
1、去官網下載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腳本,如果運行正常會獲得你的操作系統和cpu信息,自動編譯安裝
5、將export PATH=$PATH:/usr/local/go/bin 寫入$HOME/.profile
最后進行測試輸入go version 會顯示go1.1.2 linux/386
對比于其他語言的程序,Go語言的跨平臺能力是真的強,拿.Net和JAVA來說吧,.Net在.Net core出現之前是不能跨平臺的,只能在windows上編譯運行,即使是.net core出現以后,跨平臺的程序也是相當的麻煩。而java雖然一直都可以跨平臺,但是運行JAVA程序的機器上也必須要有JAVA程序運行環境JRE。而相對于Go程序,跨平臺就簡單的多了,只需要在編譯指定目標程序運行的架構和環境即可編譯出指定操作系統和架構的程序。
以上是指定了go的環境變量后執行的go build命令進行目標程序的構建,這種方式會一直生效的,如果不讓他一直生效,可以在構建的時候臨時指定環境變量,下面以window的環境為例,來介紹臨時指定環境變量的方式構建可以在Linux環境下運行的可執行程序:
可以根據不同的架構和操作系統將其編寫為不同的.bat的可執行文件放置在程序的根目錄,Linux的和MAC的也一樣編寫成腳本文件放置在程序的根目錄,這樣在構建的時候就不用再敲命令了,直接運行腳本就可以了。
Java程序編譯打包后為war包或者是java包,必須執行java -jar 命令或者將其放置到tomcat的指定目錄下,運行tomcat程序。而Go語言編寫的程序最終為可執行的文件(window下編譯出的是.exe的可執行文件),只需要將其賦予可執行的權限就可以直接運行了。
構建JAVA程序的鏡像需要指定java的基礎鏡像,否則就需要在鏡像中安裝java的運行環境了,下面展示的是構建的一個JAVA程序的鏡像,構建出來鏡像的體積相對比較大
而Go程序制作出的鏡像就不需要安裝任何的依賴環境,因為他在打包的時候就已經將依賴的包一塊打包到一起了
拿著這個鏡像就可以到處運行了。
通過對比我們可以發現,如果沒有之前的技術和業務的積累,重新開發一個新的項目,使用go去開發無疑是最容易上手的,所以現在很多公司都使用go進行開發,也逐漸將其他語言的項目逐步的用go語言進行改造。其實用什么語言不重要,合適的才重要,開發項目在選擇語言的時候也會綜合多方面來考慮選擇合適的語言和架構,畢竟很多公司都不是搞研究的,都需要項目來賺錢,所以開發的速度、客戶的滿意度、項目交付的時間才是驅動公司技術的主要因素。
我們個人也應該不斷完善自己的技術棧,不應該太依靠某種語言,最重要的還是自己的架構思想和底層架構知識,只有掌握了這些才能夠不被 社會 和公司“優化”。
下載安裝包
安裝包下載地址:golang.org/dl/
這里選擇下載Windows版本,點擊鏈接打開的頁面可能不會開始下載;地址欄里會顯示完整的下載地址,如:golang.org/doc/install?download=go1.5.1.windows-amd64.msi,不開始下載也沒關系,我們復制一下下載地址,用迅雷之類的下載工具下。
開始安裝
一路下一步就行了,沒什么需要設置的,安裝目錄最好保持默認,避免遇到一些怪問題。
安裝完成之后就可以打開命令行,看看安裝成功了沒有;
任意目錄下,直接執行“go”,能看到類似以下內容就對了:
或者執行:
[plain] view plain copy
C:\go?version
go?version?go1.5.1?windows/amd64
注意:我在安裝完成之后執行“go”的時候就提示找不到文件或目錄,我打開環境變量,在用戶變量里加了一個PATH,
檢查系統變量“PATH”中也有“C:\Go\bin”,然后就在后面加了一個分號,確定保存之后再打開命令行就可以了,也不知道到底是哪個起作用了。