關於Go tools的比較有用的flags
你剛接觸Go tools嗎?或者你想擴充套件下你的知識面?這篇文章是關於Go tools的flags,這些flags每個人都應該知道。
免責宣告:這篇檔案可能有一些偏見。這是我個人常用的flags集合。我周邊的人很難找到這些falgs的參考文件。如果你有更好的主意,可以在Twitter上私信我。
$ go build -x
-x
列出了go build觸發的所有命令。
如果你對Go的工具鏈、使用跨平臺編譯器比較好奇,或者對傳入外部編譯器的flags不清楚,或者懷疑連結器有bug,那麼使用-x
來檢視所有的觸發。
$ go build -x
WORK=/var/folders/00/1b8h8000h01000cxqpysvccm005d21/T/go-build600909754
mkdir -p $WORK/hello/perf/_obj/
mkdir -p $WORK/hello/perf/_obj/exe/
cd /Users/jbd/src/hello/perf
/Users/jbd/go/pkg/tool/darwin_amd64/compile -o $WORK/hello/perf.a -trimpath $WORK -p main -complete -buildid bbf8e880e7dd4114f42a7f57717f9ea5cc1dd18d -D _/Users/jbd/src/hello/perf -I $WORK -pack ./perf.go
cd .
/Users/jbd/go/pkg/tool/darwin_amd64/link -o $WORK/hello/perf/_obj/exe/a.out -L $WORK -extld=clang -buildmode=exe -buildid=bbf8e880e7dd4114f42a7f57717f9ea5cc1dd18d $WORK/hello/perf.a
mv $WORK/hello/perf/_obj/exe/a.out perf
$go build -gcflags
用來給Go編譯器傳入引數。go tool compile -help
列出了可以被傳入編譯器的所有的引數列表。
比如,為了禁止編譯器優化和內聯,你可以使用下面的gcfalgs:
$ go build -gcflags="-N -l"
$go test -v
它提供了非正式的測試輸出,列印了測試的名字、狀態(通過或者失敗)、耗時、測試用例的日誌等。
不帶有-v
flag的go test命令非常安靜,我經常把-v
開關開啟。比如輸出如下:
$ go test -v context
=== RUN TestBackground
--- PASS: TestBackground (0.00s)
=== RUN TestTODO
--- PASS: TestTODO (0.00s)
=== RUN TestWithCancel
--- PASS: TestWithCancel (0.10s)
=== RUN TestParentFinishesChild
--- PASS: TestParentFinishesChild (0.00s)
=== RUN TestChildFinishesFirst
--- PASS: TestChildFinishesFirst (0.00s)
=== RUN TestDeadline
--- PASS: TestDeadline (0.16s)
=== RUN TestTimeout
--- PASS: TestTimeout (0.16s)
=== RUN TestCanceledTimeout
--- PASS: TestCanceledTimeout (0.10s)
...
PASS
ok context 2.426s
$go test -race
Go競爭檢測工具可以通過--race
使用。go test也支援這個flag並且報告競爭。在開發階段使用這個flag可以檢測競爭。
$go test -run
使用-run
flag,你可以通過正則過濾測試用例。下面的命令會只測試test examples:
$ go test -run=Example
$go test -coverprofile
你可以輸出一個覆蓋資訊,如果你在測試一個包,然後使用go tool來在瀏覽器上實現視覺化:
$ go test -coverprofile=c.out && go tool cover -html=c.out
上面的命令會建立一個覆蓋資訊,然後在瀏覽器上開啟結果頁面。視覺化後的結果會類似下面的頁面:
$go test -exec
這是一個鮮為人知的特性,使用-exec
這個flag,你可以用另外的程式和tools互動。這個flag允許你使用Go tool把一些工作代理到另外的程式。
使用這個flag常用的需求場景是:當你需要做更多的事情,而不是僅僅執行宿主機的程式。Go的Android build,使用了-exec
來推送測試二進位制檔案到Android裝置(通過使用adb
),並收集測試結果。可以作為一個參考。
$go get -u
如果你執行go-test命令來獲取一個已經在GOPATH中的包,那麼go-get不好更新包到最新版本,而-u
會強制tool同步這個倉庫的最新的版本。
如果你是一個library的作者,那麼你可能喜歡寫你的安裝說明通過-u
flag,比如,golint這樣的方式:
$ go get -u github.com/golang/lint/golint
$go get -d
如果你只想clone一個repo到GOPATH,跳過編譯和安裝過程,那麼使用-d
。它會下載包,然後在嘗試編譯和安裝之前停止。
我經常使用它,作為git clone的替代命令,使用虛假的URLs,因為它會克隆這個repo到它合適的GOPATH。比如:
$ go get -d golang.org/x/oauth2/...
會克隆包到$GOPATH/src/golang.org/x/ouath2
。給出的golang.org/x/oauth2
是一個虛假的URL,go-get這個倉庫是很有用的,而不是嘗試知道知己的repo是什麼(go.googlesource.com/oauth2)。
$go get -t
如果你的包需要額外的包來測試,-t
會允許你在go-get過程中下載它們。如果你不傳入-t
引數,go get會只下載非測試程式碼的依賴。
$ go list -f
允許你下載Go包以一種自定義的格式。對寫bash指令碼非常有用。下面的命令會輸出runtime包的依賴:
$ go list -f '{{.Deps}}' runtime
[runtime/internal/atomic runtime/internal/sys unsafe]
更多的格式化資訊可以在Dave Cheney的文章的go list章節得到。
相關文章
- oracle幾個比較有用的語句Oracle
- 關於Oracle字元型別的比較Oracle字元型別
- iOS開發比較有用的程式碼段iOS
- tar 命令一個比較有用的引數
- 令人比較失落的IT圈子-關於華為裁員
- Go和Python比較的話,哪個比較好?GoPython
- Go 與 C++ 的對比和比較GoC++
- 關於c、c++之前比較模糊的概念C++
- EJBQL中關於日期型資料的比較
- Go與C#的比較 - RedditGoC#
- Go語言的Web框架比較GoWeb框架
- 一些比較有用的oracle查詢語句Oracle
- 關於時間跨度比較的OVERLAPS函式函式
- 關於資料庫物件版本比較的指令碼資料庫物件指令碼
- Go 每日一庫之 go-flagsGo
- 最近論壇對我比較有用的連線歸類
- 一個不錯的關於mysql和posgresql比較的帖子MySql
- 轉一篇關於JAVA 和 .NET的文章的比較Java
- 關於plsql,crt登入比較慢SQL
- 關於驗證表中有無資料的方法比較
- php關於金額比較引發的問題(轉)PHP
- Java,Go和Rust之間的比較 - DexterJavaGoRust
- 【比較】Oracle不同版本中關於ALTER TABLESPACE的功能演進Oracle
- 原生JS基礎但比較有用的一些方法總結JS
- Rust, Go與Hasekll比較 - RedditRustGo
- 關於Spring的JDBC連線mysql(與傳統jdbc比較)SpringJDBCMySql
- 關於字串的幾個有用函式 (轉)字串函式
- 關於Android SDK裡的compileSdk、minSdk、targetSdk、buildTools、Tools、Platform-toolsAndroidCompileUIPlatform
- tld自定義標籤系列--使用body-content的作用--比較有用
- 簡單介紹Go 字串比較的實現示例Go字串
- 現代語言Go、Rust、Swift和Dart的比較GoRustSwiftDart
- Boost.Asio和ACE之間關於Socket程式設計的比較程式設計
- 關於 mina netty activiemq RabbitMq nio 的比較 區別 應用NettyMQ
- 關閉資料庫比較好的方法資料庫
- Python解惑:整數比較 is ==的比較Python
- Integer的比較
- 基於matlab的邊緣提取方法的比較Matlab
- 關於應用整合:同步與非同步通訊模式之間的比較非同步模式