親測GO環境搭建,理解go build、go install、go get
前言:
秉承著作為一個新人,要有著“指哪打哪”的覺悟。在老大的需求下,頂上前端的空缺先幹陣子前端。當然,在工作之餘還是要好好朝著既定的方向努力的,實習結束後還了電腦,這次畢業再來換了新Mac,重新搭下Go的環境,順便好好總結下,以後隨著學習的深入,也會持續更新。
GO下載:
GO語言中文網下載: ofollow,noindex" target="_blank">https://studygolang.com/dl
Mac下直接通過brew instatll go指令即可完成下載安裝
GO環境變數配置:
$GOROOT=/usr/local/go GO安裝目錄
$GOPATH=/usr/local/var/www/go GO工作目錄
$GOBIN=$GOPATH/bin GO可執行檔案目錄
$PATH=$PATH:$GOBIN:$GOROOT/bin 將GO可執行檔案加入PATH中,使GO指令與我們編寫的GO應用可以全域性呼叫
$GOPATH工作目錄結構,約定有三個子目錄(需要自行建立):
src ——存放原始碼檔案
pkg——存放編譯後的檔案
bin ——存放編譯後的可執行檔案
示例(首先使用go推薦的go build方式構建應用,稍後會說到其他的方式):
通過我們的操作,在最終測試成功後,$GOPATH的目錄樹應該如下所示:
具體操作如下:
1、建立應用包mypkg: 切到【$GOPATH/src】目錄下,建立一個mypkg目錄,在mypkg目錄下,新建一個hello.go,內容如下:
2、編譯應用包(在此Demo中,此步驟並不必要,在此只是為了展示go install編譯效果): 在剛剛的目錄下執行【go install】指令或者在任意目錄下執行【go install mypkg】指令,如果程式碼有錯或依賴找不到會報錯,如果正確則沒有任何提示。此時,你可以切到【$GOPATH/pkg】目錄下,會發現多了一個名為【$GOOS_$GOARCH】的目錄,切進該目錄,就會看到剛剛編譯生成的檔案mypkg.a檔案。(其中$GOOS與$GOARCH的具體值可以通過【go env】指令查詢,更多詳情可參看: http://wiki.jikexueyuan.com/project/go-command-tutorial/0.14.html )
3、建立新應用包myapp,建立新檔案main.go(同步驟1),import引入mypkg包 ,內容如下:
4、構建可執行檔案: 在myapp目錄下,使用【go build】指令,會在當前目錄下生成一個myapp的可執行檔案,這個可執行檔案不依賴其他檔案,複製到任何目錄下都可通過【./myapp】執行,複製到任何$PATH配置的目錄中都可通過【myapp】全域性執行。
總結: 我們在這個Demo裡主要用到了兩個GO指令,【go install】與【go build】,他們的區別如下:
【go build】指令的作用是: 在當前目錄下編譯生成可執行檔案。注意,go build指令會呼叫所有引用包的原始碼,重新編譯,而不是直接使用pkg裡的編譯後文件,如果在【$GOROOT】與【$GOPATH】下沒有找到import引入包的專案原始碼,就會報錯。在本demo裡,main.go中import引入了"mypkg"包,如果我刪除【$GOPATH/src/mypkg】原始碼,執行【go build】指令,會報錯如下:
【go install】指令的作用是: 編譯原始碼,如果為可執行檔案(package "main"且包含main方法),則會編譯生成可執行檔案到【$GOPATH/bin】目錄下;可執行檔案import引入的其他包,就會被編譯到【$GOPATH/pkg/$GOOS_$GOARCH】目錄下。
(關於go的匯入和編譯,如果有不清楚的,可以看下這篇部落格 https://studygolang.com/articles/3189 )
我們會發現: 【go install】也可以完成類似【go build】的功能,區別在於【go install】會生成二進位制檔案到【$GOPATH/pkg/$GOOS_$GOARCH】目錄下(這個二進位制檔案對於我們並沒什麼意義),但【go install】會把可執行檔案自動生成到【$GOBIN】目錄下,這是在一開始被配置到【$PATH】中了,這樣就可以使專案可執行檔案能被方便的全域性呼叫。
如果在本Demo中,使用【go install】構建可執行檔案 :
我們編寫好原始碼檔案時,目錄樹如下:
切到myapp目錄下,執行【go install】指令,會生成如下結構目錄樹:
此時就可以通過【myapp】全域性執行了!
其他指令:
go env指令可檢查go環境
go version檢視go版本
go get可以暫時理解為git clone到【$GOPATH/src】 + go install