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