1. 程式人生 > >go學習筆記-常見命令

go學習筆記-常見命令

and cover show fix nts 令行 編譯 每一個 program

常見命令

go 命令

可以在控制臺執行go來查看

go

Go is a tool for managing Go source code.

Usage:

    go <command> [arguments]

The commands are:

    bug         start a bug report
    build       compile packages and dependencies
    clean       remove object files and cached files
    doc         show documentation for package or symbol
    env         print Go environment information
    fix         update packages to use new APIs
    fmt         gofmt (reformat) package sources
    generate    generate Go files by processing source
    get         download and install packages and dependencies
    install     compile and install packages and dependencies
    list        list packages or modules
    mod         module maintenance
    run         compile and run Go program
    test        test packages
    tool        run specified go tool
    version     print Go version
    vet         report likely mistakes in packages

go build

這個命令主要用於編譯代碼。在包的編譯過程中,若有必要,會同時編譯與之相關聯的包。

如果是普通包,就像我們在1.2節中編寫的mymath包那樣,當你執行go build之後,它不會產生任何文件。如果你需要在$GOPATH/pkg下生成相應的文件,那就得執行go install。

如果是main包,當你執行go build之後,它就會在當前目錄下生成一個可執行文件。如果你需要在$GOPATH/bin下生成相應的文件,需要執行go install,或者使用go build -o 路徑/a.exe。

如果某個項目文件夾下有多個文件,而你只想編譯某個文件,就可在go build之後加上文件名,例如go build a.go;go build命令默認會編譯當前目錄下的所有go文件。

你也可以指定編譯輸出的文件名。例如1.2節中的mathapp應用,我們可以指定go build -o astaxie.exe,默認情況是你的package名(非main包),或者是第一個源文件的文件名(main包)。

(註:實際上,package名在Go語言規範中指代碼中“package”後使用的名稱,此名稱可以與文件夾名不同。默認生成的可執行文件名是文件夾名。)

go build會忽略目錄下以“_”或“.”開頭的go文件。

如果你的源代碼針對不同的操作系統需要不同的處理,那麽你可以根據不同的操作系統後綴來命名文件。例如有一個讀取數組的程序,它對於不同的操作系統可能有如下幾個源文件:

array_linux.go array_darwin.go array_windows.go array_freebsd.go

go build的時候會選擇性地編譯以系統名結尾的文件(Linux、Darwin、Windows、Freebsd)。例如Linux系統下面編譯只會選擇array_linux.go文件,其它系統命名後綴文件全部忽略。

參數的介紹

-o 指定輸出的文件名,可以帶上路徑,例如 go build -o a/b/c   
-i 安裝相應的包,編譯+go install    
-a 更新全部已經是最新的包的,但是對標準包不適用 
-n 把需要執行的編譯命令打印出來,但是不執行,這樣就可以很容易的知道底層是如何運行的 
-p n 指定可以並行可運行的編譯數目,默認是CPU數目    
-race 開啟編譯的時候自動檢測數據競爭的情況,目前只支持64位的機器    
-v 打印出來我們正在編譯的包名   
-work 打印出來編譯時候的臨時文件夾名稱,並且如果已經存在的話就不要刪除  
-x 打印出來執行的命令,其實就是和-n的結果類似,只是這個會執行   
-ccflags 'arg list' 傳遞參數給5c, 6c, 8c 調用   
-compiler name 指定相應的編譯器,gccgo還是gc    
-gccgoflags 'arg list' 傳遞參數給gccgo編譯連接調用  
-gcflags 'arg list' 傳遞參數給5g, 6g, 8g 調用   
-installsuffix suffix 為了和默認的安裝包區別開來,采用這個前綴來重新安裝那些依賴的包,-race的時候默認已經是-installsuffix race,大家可以通過-n命令來驗證     
-ldflags 'flag list' 傳遞參數給5l, 6l, 8l 調用  
-tags 'tag list' 設置在編譯的時候可以適配的那些tag,詳細的tag限制參考裏面的 Build Constraints   

go clean

這個命令是用來移除當前源碼包和關聯源碼包裏面編譯生成的文件。這些文件包括

_obj/            舊的object目錄,由Makefiles遺留
_test/           舊的test目錄,由Makefiles遺留
_testmain.go     舊的gotest文件,由Makefiles遺留
test.out         舊的test記錄,由Makefiles遺留
build.out        舊的test記錄,由Makefiles遺留
*.[568ao]        object文件,由Makefiles遺留

DIR(.exe)        由go build產生
DIR.test(.exe)   由go test -c產生
MAINFILE(.exe)   由go build MAINFILE.go產生
*.so             由 SWIG 產生

參數介紹

-i 清除關聯的安裝的包和可運行文件,也就是通過go install安裝的文件   
-n 把需要執行的清除命令打印出來,但是不執行,這樣就可以很容易的知道底層是如何運行的 
-r 循環的清除在import中引入的包 
-x 打印出來執行的詳細命令,其實就是-n打印的執行版本

go get

這個命令是用來動態獲取遠程代碼包的,目前支持的有BitBucket、GitHub、Google Code和Launchpad。這個命令在內部實際上分成了兩步操作:第一步是下載源碼包,第二步是執行go install。下載源碼包的go工具會自動根據不同的域名調用不同的源碼工具,對應關系如下:

BitBucket (Mercurial Git)
GitHub (Git)
Google Code Project Hosting (Git, Mercurial, Subversion)
Launchpad (Bazaar)

為了go get 能正常工作,你必須確保安裝了合適的源碼管理工具,並同時把這些命令加入你的PATH中。

參數介紹:

-d 只下載不安裝
-f 只有在你包含了-u參數的時候才有效,不讓-u去驗證import中的每一個都已經獲取了,這對於本地fork的包特別有用
-fix 在獲取源碼之後先運行fix,然後再去做其他的事情
-t 同時也下載需要為運行測試所需要的包
-u 強制使用網絡去更新包和它的依賴包
-v 顯示執行的命令

go test

執行這個命令,會自動讀取源碼目錄下面名為*_test.go的文件,生成並運行測試用的可執行文件。輸出的信息類似

ok   archive/tar   0.011s
FAIL archive/zip   0.022s
ok   compress/gzip 0.033s

默認的情況下,不需要任何的參數,它會自動把你源碼包下面所有test文件測試完畢,當然你也可以帶上參數,常用的參數:

-bench regexp 執行相應的benchmarks,例如 -bench=.
-cover 開啟測試覆蓋率
-run regexp 只運行regexp匹配的函數,例如 -run=Array 那麽就執行包含有Array開頭的函數
-v 顯示測試的詳細命令

go run

執行這個命令,編譯並直接運行程序,會產生一個臨時文件(但不會生成 .exe 文件),直接在命令行輸出程序執行結果。常用參數:

-a:強制編譯相關代碼,無論是否編譯過 
-v:列出被編譯的代碼包的名稱 
-a -v:列出所有被編譯的代碼包的名稱 
-p n:並行編譯,其中n為並行的數量 如-p 2 
-n:打印編譯過程中所需運行的命令,但並不執行這些命令 
-x:打印編譯過程中所需運行的命令,並執行這些命令 
-work:顯示編譯時創建的臨時工作目錄的路徑,並且不刪除這個臨時工作目錄 

除了以上的這些命令外,還可以使用go help 命令獲取更詳細的幫助信息。

go學習筆記-常見命令