1. 程式人生 > >go 學習 ---golang命令

go 學習 ---golang命令

1、GO命令一覽

  GO提供了很多命令,包括打包、格式化程式碼、文件生成、下載第三方包等等諸多功能,我們可以通過在控制檯下執行 go 來檢視內建的所有命令

  下面來逐個介紹,也可以詳細參考 https://github.com/hyper-carrot/go_command_tutorial

 

2、go build

  這個命令可以直接使用,也可以帶上程式碼包或原始碼檔案使用。

  如果是直接使用,表示試圖編譯當前目錄所對應的程式碼包,如果當前目錄不是一個有效的程式碼包(包含在 $GOPATH/src 目錄下)則會報錯;如果帶上程式碼包名,則表示編譯指定的程式碼包;如果帶上原始碼檔案,則表示編譯指定原始碼檔案。

  GO語言的原始碼檔案分為三類,包括命令原始碼檔案、庫原始碼 檔案和測試原始碼檔案。如果編譯的是命令原始碼檔案,或包含命令原始碼檔案的包(main包)時,編譯通過後會生成可執行檔案;反之則不會生成任何檔案,只是做檢查性編譯。

  可以在執行 go build 命令時,加上一些標記,如:

  -v 標記,可以把命令執行過程中構建的包名(包含編譯過程中依賴的包)打印出來,如果 go build 的是一個原始碼檔案,則會打印出的包名為 command-line-arguments,這是編譯原始碼檔案時生成的虛擬包名,所以看到不用覺得奇怪。

  -x 標記,可以列印編譯期間所用到的所有 shell 命令。

  -o 標記,用來指定生成檔案的路徑和名稱。

  -a 標記,強制重新編譯。

  -buildmode=shared 標記,這個引數可以指定當前編譯生成的結果型別,如靜態庫和動態庫。GO語言預設使用靜態編譯,好處是部署時非常簡單,但使用動態庫,可以減少分發包的大小,大家可以根據實際情況選擇。注意,目前在windows下尚不支援編譯成動態庫。

  更多引數,請使用 go build -h 或 go help build 檢視。

 

3、go install

  這個命令用於編譯安裝,可以作用於 main 包和非 main 包,然後將編譯後的生成的執行檔案存放到工程的 bin 目錄下,將生成的歸檔檔案(即靜態連結庫)存放到工程的 pkg 目錄下。使用方式類似於 go build,可以在某個程式碼包目錄下直接使用,也可以指定程式碼包使用。

 

4、go run

  編譯並執行,只能作用於命令原始碼檔案,一般用於開發中快速測試。

 

5、go clean

  該命令可以刪除執行其它命令時產生的檔案和目錄,但我沒有找到刪除 pkg 目錄下的歸檔檔案的選項。

 

6、go test

  進行單元測試的工具,單元測試程式碼建議與被測試程式碼放在同一個程式碼包中,並以 "_test.go" 為後期,測試函式建議以 "Test" 為名稱字首。該命令可以對程式碼包進行測試,也可以指定某個測試程式碼檔案執行(要一併帶上被測試程式碼檔案)

 

7、go get

  下載第三方程式碼包並編譯安裝 ,需要注意的是,它會下載安裝到 GOPATH 環境變數配置的第一個工作區中。

  另外,我發現,如果某一個工作區中(不必是GOPATH 環境變數配置的第一個工作區中)已經存在該程式碼包,則不會重新下載。

  此外,我們還可以自己搭建程式碼託管網站,有興趣可以參考:https://github.com/hyper-carrot/go_command_tutorial/blob/master/0.3.md

 

8、go doc

  文件註釋相關,可以搭建本地GO文件伺服器,包含自己的專案註釋,更多細節請參考:https://github.com/hyper-carrot/go_command_tutorial/blob/master/0.5.md

 

9、go list

  不加任何標記直接使用,是顯示指定包的匯入路徑,如 go list net/http 就顯示 net/http。

  該命令加上 -json 標記可以顯示完整資訊,如:

  

  如果只想顯示指定資訊,可以使用 -f 標記,如 go list -f {{.GoFiles}} net/http 可以顯示 net/http 包中的 GO 原始碼檔案列表。(所以可以理解,預設的 go list 相當於 go list -f {{.ImportPath}})

 

10、go fmt

  作用於程式碼包,用於格式化程式碼包中的程式碼格式,注意不包含程式碼包中的子程式碼包。是 gofmt 的簡單封裝,相當於 gofmt -l -w ,更多資訊,請通過 gofmt -h 檢視。 

 

11、go fix

  簡單的說,這是一個當GO語言版本升級之後,把程式碼包中舊的語法更新成新版本語法的自動化工具。它是 go tool fix 的簡單封裝,它作用於程式碼包。當需要升級自己的專案或者升級下載的第三方程式碼包,可以使用此方法。(下載並升級程式碼包可以使用 go get -fix 命令 )

 

12、go vet

  靜態檢查工具,這是個好東西,一般專案快完成時進行進行優化時需要,到時候再詳細研究。

 

13、go tool pprof

  效能檢查工具,等需要時再詳細研究。詳見:https://github.com/hyper-carrot/go_command_tutorial/blob/master/0.12.md

 

14、go tool cgo

  從 cgo的名字可以猜出,這是一個跟C語言和GO語言有關的命令,需要時再進行研究。

 

15、go env

  用於列印GO語言的環境資訊,如 GOPATH 是工作區目錄,GOROOT 是GO語言安裝目錄,GOBIN 是通過 go install 命令生成可執行檔案的存放目錄(預設是當前工作區的 bin 目錄下),GOEXE 為生成可執行檔案的字尾

 

16、轉成彙編程式碼

go tool objdump -s "operate\.Login" server

 

 上面的意思是,解析可執行檔案server,將其中的 operate 包的 Login 方法轉成彙編程式碼。