互連網二十多年,已到十字路口。區塊鏈出現前的互連網被稱為古典互連網,而應用區塊鏈技術的互連網才進入了後互連網時代。作為一項新興的技術,區塊鏈無疑正處於風口浪尖之上,其發展前景於普通福士而言也終將是利好。但目前由於區塊鏈技術處於發展早期階段,存在技術成熟度等級、落地應用情境有限等問題,兄弟連教育建議使用者在選擇專業Go語言+區塊鏈培訓機構前應進行仔細考量與辨別。
安裝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 只編譯主程式(有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支援多數開源社區(例如: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 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
高能預警,兄弟連教育區塊鏈直播課程8月持續火爆來襲!
原價1188元的12節區塊鏈進階課程,現僅需1元!
還可免費領取《Go語言基礎實戰項目開發》與《Go語言進階實戰項目開發》教材兩本!!
限時限量!!先到先得!!
http://www.ydma.cn/open/course/24
關注兄弟連區塊鏈技術公眾號領取更多技術乾貨哦!!!