Go語言命令行操作命令詳細(xì)介紹
Go 命令
Go語言自帶有一套完整的命令操作工具,你可以通過在命令行中執(zhí)行g(shù)o來查看它們:

圖1.3 Go命令顯示詳細(xì)的信息
這些命令對于我們平時編寫的代碼非常有用,接下來就讓我們了解一些常用的命令。
go build
這個命令主要用于測試編譯。在包的編譯過程中,若有必要,會同時編譯與之相關(guān)聯(lián)的包。
1.如果是普通包,就像我們在1.2節(jié)中編寫的mymath包那樣,當(dāng)你執(zhí)行g(shù)o build之后,它不會產(chǎn)生任何文件。如果你需要在$GOPATH/pkg下生成相應(yīng)的文件,那就得執(zhí)行g(shù)o install了。
2.如果是main包,當(dāng)你執(zhí)行g(shù)o build之后,它就會在當(dāng)前目錄下生成一個可執(zhí)行文件。如果你需要在$GOPATH/bin下生成相應(yīng)的文件,需要執(zhí)行g(shù)o install,或者使用go build -o 路徑/a.exe。
3.如果某個項目文件夾下有多個文件,而你只想編譯某個文件,就可在go build之后加上文件名,例如go build a.go;go build命令默認(rèn)會編譯當(dāng)前目錄下的所有g(shù)o文件。
你也可以指定編譯輸出的文件名。例如1.2節(jié)中的mathapp應(yīng)用,我們可以指定go build -o astaxie.exe,默認(rèn)情況是你的package名(非main包),或者是第一個源文件的文件名(main包)。
(注:實際上,package名在Go語言規(guī)范中指代碼中“package”后使用的名稱,此名稱可以與文件夾名不同。默認(rèn)生成的可執(zhí)行文件名是文件夾名。)
go build會忽略目錄下以“_”或“.”開頭的go文件。
如果你的源代碼針對不同的操作系統(tǒng)需要不同的處理,那么你可以根據(jù)不同的操作系統(tǒng)后綴來命名文件。例如有一個讀取數(shù)組的程序,它對于不同的操作系統(tǒng)可能有如下幾個源文件:
array_linux.go array_darwin.go array_windows.go array_freebsd.go
go build的時候會選擇性地編譯以系統(tǒng)名結(jié)尾的文件(Linux、Darwin、Windows、Freebsd)。例如Linux系統(tǒng)下面編譯只會選擇array_linux.go文件,其它系統(tǒng)命名后綴文件全部忽略。
go clean
這個命令是用來移除當(dāng)前源碼包里面編譯生成的文件。這些文件包括
_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產(chǎn)生
DIR.test(.exe) 由go test -c產(chǎn)生
MAINFILE(.exe) 由go build MAINFILE.go產(chǎn)生
我一般都是利用這個命令清除編譯文件,然后github遞交源碼,在本機測試的時候這些編譯文件都是和系統(tǒng)相關(guān)的,但是對于源碼管理來說沒必要。
go fmt
有過C/C++經(jīng)驗的讀者會知道,一些人經(jīng)常為代碼采取K&R風(fēng)格還是ANSI風(fēng)格而爭論不休。在go中,代碼則有標(biāo)準(zhǔn)的風(fēng)格。由于之前已經(jīng)有的一些習(xí)慣或其它的原因我們常將代碼寫成ANSI風(fēng)格或者其它更合適自己的格式,這將為人們在閱讀別人的代碼時添加不必要的負(fù)擔(dān),所以go強制了代碼格式(比如左大括號必須放在行尾),不按照此格式的代碼將不能編譯通過,為了減少浪費在排版上的時間,go工具集中提供了一個go fmt命令 它可以幫你格式化你寫好的代碼文件,使你寫代碼的時候不需要關(guān)心格式,你只需要在寫完之后執(zhí)行g(shù)o fmt <文件名>.go,你的代碼就被修改成了標(biāo)準(zhǔn)格式,但是我平常很少用到這個命令,因為開發(fā)工具里面一般都帶了保存時候自動格式化功能,這個功能其實在底層就是調(diào)用了go fmt。接下來的一節(jié)我將講述兩個工具,這兩個工具都自帶了保存文件時自動化go fmt功能。
使用go fmt命令,更多時候是用gofmt,而且需要參數(shù)-w,否則格式化結(jié)果不會寫入文件。gofmt -w src,可以格式化整個項目。
go get
這個命令是用來動態(tài)獲取遠(yuǎn)程代碼包的,目前支持的有BitBucket、GitHub、Google Code和Launchpad。這個命令在內(nèi)部實際上分成了兩步操作:第一步是下載源碼包,第二步是執(zhí)行g(shù)o install。下載源碼包的go工具會自動根據(jù)不同的域名調(diào)用不同的源碼工具,對應(yīng)關(guān)系如下:
BitBucket (Mercurial Git)
GitHub (Git)
Google Code Project Hosting (Git, Mercurial, Subversion)
Launchpad (Bazaar)
所以為了go get 能正常工作,你必須確保安裝了合適的源碼管理工具,并同時把這些命令加入你的PATH中。其實go get支持自定義域名的功能,具體參見go help remote。
go install
這個命令在內(nèi)部實際上分成了兩步操作:第一步是生成結(jié)果文件(可執(zhí)行文件或者.a包),第二步會把編譯好的結(jié)果移到$GOPATH/pkg或者$GOPATH/bin。
go test
執(zhí)行這個命令,會自動讀取源碼目錄下面名為*_test.go的文件,生成并運行測試用的可執(zhí)行文件。輸出的信息類似
ok archive/tar 0.011s
FAIL archive/zip 0.022s
ok compress/gzip 0.033s
...
默認(rèn)的情況下,不需要任何的參數(shù),它會自動把你源碼包下面所有test文件測試完畢,當(dāng)然你也可以帶上參數(shù),詳情請參考go help testflag
go doc
(1.2rc1 以後沒有 go doc 指令, 只留下 godoc 指令) 很多人說go不需要任何的第三方文檔,例如chm手冊之類的(其實我已經(jīng)做了一個了,chm手冊),因為它內(nèi)部就有一個很強大的文檔工具。
如何查看相應(yīng)package的文檔呢? 例如builtin包,那么執(zhí)行g(shù)o doc builtin 如果是http包,那么執(zhí)行g(shù)o doc net/http 查看某一個包里面的函數(shù),那么執(zhí)行g(shù)odoc fmt Printf 也可以查看相應(yīng)的代碼,執(zhí)行g(shù)odoc -src fmt Printf
通過命令在命令行執(zhí)行 godoc -http=:端口號 比如godoc -http=:8080。然后在瀏覽器中打開127.0.0.1:8080,你將會看到一個golang.org的本地copy版本,通過它你可以查詢pkg文檔等其它內(nèi)容。如果你設(shè)置了GOPATH,在pkg分類下,不但會列出標(biāo)準(zhǔn)包的文檔,還會列出你本地GOPATH中所有項目的相關(guān)文檔,這對于經(jīng)常被墻的用戶來說是一個不錯的選擇。
其它命令
go還提供了其它很多的工具,例如下面的這些工具
go fix 用來修復(fù)以前老版本的代碼到新版本,例如go1之前老版本的代碼轉(zhuǎn)化到go1
go version 查看go當(dāng)前的版本
go env 查看當(dāng)前go的環(huán)境變量
go list 列出當(dāng)前全部安裝的package
go run 編譯并運行Go程序
以上這些工具還有很多參數(shù)沒有一一介紹,用戶可以使用go help 命令獲取更詳細(xì)的幫助信息。
相關(guān)文章
如何使用Goland IDE go mod 方式構(gòu)建項目
這篇文章主要介紹了如何使用Goland IDE go mod 方式構(gòu)建項目,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10
簡單談?wù)凣olang中的字符串與字節(jié)數(shù)組
這篇文章主要給大家介紹了關(guān)于Golang中字符串與字節(jié)數(shù)組的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用Golang具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03

