[譯] 關于 Go tools 的比較有用的 flags

DerekVes 8年前發布 | 9K 次閱讀 OAuth 測試技術 Google Go/Golang開發

關于Go tools的比較有用的flags

你剛接觸Go tools嗎?或者你想擴展下你的知識面?這篇文章是關于Go tools的flags,這些flags每個人都應該知道。

免責聲明:這篇文件可能有一些偏見。這是我個人常用的flags集合。我周邊的人很難找到這些falgs的參考文檔。如果你有更好的主意,可以在 推ter 上私信我。

$ 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]

 

 

來自:https://github.com/itfanr/articles-about-golang/blob/master/2016-09/1.go-tool-flags.md

 

 本文由用戶 DerekVes 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!