安裝golang
GOROOT 理論上只要定義這一個環境變量就可以玩了,go編譯的時候會首先在安裝目錄下尋找包
GOBIN 如果不定義的話,默認是$GOROOT/bin 如果想不切換目錄執行go的命令的話.需要將$GOBIN 加入到PATH目錄中.這個你懂的
GOPATH 一般是你的開發目錄,可以有多個.多個目錄的時候Windows是分號,Linux系統是冒號,當有多個GOPATH時,默認會將go get的內容放在第一個目錄下
$GOPATH 目錄約定有三個子目錄:
- src 存放源代碼(比如:.go .c .h .s等)
- pkg 編譯后生成的文件(比如:.a)
- bin 編譯后生成的可執行文件(為了方便,可以把此目錄加入到 $PATH 變量中)
編譯
構建一個Go程序需要兩步:編譯和鏈接。
編譯和鏈 接過程都由工具go處理,它不僅可以構建本地程序和包,還能夠獲取、構建以及安裝第三方程序和包。
go build
go build 只編譯主程序(有main()函數的go文件).且如果不指定-o參數,會當前目錄下生成一個可執行文件。
go build -o myfirstgo 例如 hellogo.go 編譯成指定目標文件名myfirstgo
go build 后面不帶文件名,我們將得到一個與目錄名同名的可執行文件 例如app/main.go 則得到app
如果有多個項目,即由多個main..則可指定項目,可在go build
之后加上文件名,例如go build a.go
;
go get
go get 獲取遠程包的工具,目前go get支持多數開源社區(例如:github、googlecode、bitbucket、Launchpad)
例如 :go get github.com/astaxie/beedb go get -u 參數可以自動更新包,而且當go get的時候會自動獲取該包依賴的其他第三方包
go get本質上可以理解為首先第一步是通過源碼工具clone代碼到src下面,然后執行go install
要想go能夠編譯本地程序和包,有三個要求:
- Go的bin目錄($GOROOT/bin或%GOROOT%\bin)必須在PATH環境變 量下
- 必須存在一個目錄,該目錄下包含一個src目錄,本地程序和包的源碼就駐留在src目錄下
- 包含src的那個目錄必須在GOPATH環境變量中設置
Go編譯器的package搜索順序是這樣的,以搜索hello這個package為例:
- 首先,Go編譯器會在GO安裝目錄(GOROOT,這里是/usr/local/go)下查找是否有src/pkg/hello相關包源碼;如果沒有則繼續;
- 若GOPATH=PATH1:PAHT2,則Go編譯器會依次查找是否存在PATH1/src/hello、PATH2/src/hello;配置在GOPATH中的PATH1和PATH2被稱作workplace;
go install
go install命令除了做了go build所做的事情之外,還將可執行文件放在標准位置($GOPATH/bin或%GOPATH%\bin)。
go install還可編譯其他非主程序的包放在pkg目錄下
這意味着將一個單一路徑($GOPATH /bin或%GOPATH>%\bin)加入到PATH環境變量中,我們安裝的所有Go程序就可以方便地被加入到PATH中。 install命令執行后,我們發現main目錄下沒有任何變化,原先build時產生的main可執行文件也不見了蹤影。
別急,前面說過Go install也有一套自己的約定:
- go install編譯出的可執行文件文件名為其所在目錄名.所以可以把main目錄改成你想要的目錄名
- go install將可執行文件安裝到與src同級別的bin目錄下,bin目錄由go install自動創建.如果主文件不在src/DIR 子目錄下.則不會生成到bin目錄下
- go install將可執行文件依賴的各種package編譯后,放在與src同級別的pkg目錄下
. |-- bin | `-- main.exe |-- pkg | `-- windows_amd64 | `-- hello.a `-- src |-- hello | `-- hello.go `-- main `-- main.go
1.go的入口程序,為package main下的main函數..和其所在的包名和文件名無關..即包名,和文件名可以自定義.
2.雖然包名可以自定義,但是盡量保持為main.因為golang不允許同一個目錄下有兩個不同包名的文件出現,如果app/main.go,app/test.go,test的package為app,則會發生下面的沖突
can't load package: package app: found packages main (main.go) and app (test.go) in /Volumes/Opt/workspace-go/src/app