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 方法轉成匯編代碼。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM