官术网_书友最值得收藏!

  • Go Web編程
  • 謝孟軍
  • 2018字
  • 2018-12-27 18:47:49

1.3 Go語言命令

Go語言命令

Go語言自帶有一套完整的命令操作工具,你可以通過在命令行中執(zhí)行g(shù)o來查看它們,如圖1.3所示。

圖1.3 Go語言命令顯示詳細(xì)的信息

這些命令對于我們平時(shí)編寫代碼非常有用,接下來就讓我們了解其中一些常用的命令。

go build

這個(gè)命令主要用于測試編譯。在包的編譯過程中,若有必要,會同時(shí)編譯與之相關(guān)聯(lián)的包。

● 如果是普通包,就像我們在第1.2節(jié)中編寫的mymath包那樣,當(dāng)你執(zhí)行g(shù)o build之后,它不會產(chǎn)生任何文件。如果你需要在$GOPATH/pkg 下生成相應(yīng)的文件,則要執(zhí)行g(shù)o install。

● 如果是main包,當(dāng)你執(zhí)行g(shù)o build之后,它就會在當(dāng)前目錄下生成一個(gè)可執(zhí)行文件。如果你需要在$GOPATH/bin下生成相應(yīng)的文件,需要執(zhí)行g(shù)o install,或者使用go build -o 路徑/a.exe。

● 如果某個(gè)項(xiàng)目文件夾下有多個(gè)文件,而你只想編譯某個(gè)文件,就可在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包),或者是第一個(gè)源文件的文件名(main包)。

注:實(shí)際上,package名在Go語言規(guī)范里指代碼中“package”后使用的名稱,此名稱可以與文件夾名不同。默認(rèn)生成的可執(zhí)行文件名是文件夾名。

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

● 如果你的源代碼針對不同的操作系統(tǒng)需要不同的處理,那么你可以根據(jù)不同的操作系統(tǒng)后綴來命名文件。例如,有一個(gè)讀取數(shù)組的程序,它對于不同的操作系統(tǒng)可能有如下幾個(gè)源文件:

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

使用go build的時(shí)候會選擇性地編譯以系統(tǒng)名結(jié)尾的文件(Linux、darwin、Windows、freebsd)。例如,Linux系統(tǒng)下面編譯只會選擇array_linux.go文件,其他系統(tǒng)命名后綴文件全部忽略。

go clean

這個(gè)命令用來移除當(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)生

筆者一般都是利用這個(gè)命令清除編譯文件,然后用github遞交源碼,在本機(jī)測試時(shí),這些編譯文件都是和系統(tǒng)相關(guān)的,但是對于源碼管理來說沒必要。

go fmt

有過C/C++編程經(jīng)驗(yàn)的讀者會知道,一些人經(jīng)常為代碼是采取K&R風(fēng)格還是ANSI風(fēng)格而爭論不休。在Go語言中,代碼則有標(biāo)準(zhǔn)的風(fēng)格。由于之前已經(jīng)有的一些習(xí)慣或原因,我們常將代碼寫成ANSI風(fēng)格或者其他更合適自己的格式,這為他人閱讀代碼時(shí)添加不必要的負(fù)擔(dān),所以Go語言強(qiáng)制了代碼格式(比如左花括號必須放在行尾),不按照此格式的代碼將不能編譯通過。為了減少浪費(fèi)在排版上的時(shí)間,Go 語言工具集中提供了一個(gè)go fmt命令,它可以幫你格式化所寫好的代碼文件,使你在寫代碼的時(shí)候不需要關(guān)心格式,只需要在寫完之后執(zhí)行g(shù)o fmt <文件名>.go,你的代碼就被修改成了標(biāo)準(zhǔn)格式。但是筆者平常很少用到這個(gè)命令,因?yàn)殚_發(fā)工具里面一般都帶有保存時(shí)自動格式化功能,這個(gè)功能其實(shí)在底層就是調(diào)用了go fmt。接下來我們將講述兩個(gè)工具,這兩個(gè)工具都自帶保存文件時(shí)自動化go fmt功能。

使用go fmt命令,更多的時(shí)候是用gofmt,而且需要參數(shù)-w,否則格式化結(jié)果不會寫入文件。使用gofmt -w src,可以格式化整個(gè)項(xiàng)目。

go get

這個(gè)命令用以動態(tài)獲取遠(yuǎn)程代碼包,目前支持的有BitBucket、GitHub、Google Code和 Launchpad。這個(gè)命令在內(nèi)部實(shí)際上分成兩步操作:第一步是下載源碼包,第二步是執(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 能正常工作,你必須確保安裝了合適的源碼管理工具,并同時(shí)把這些命令加入你的PATH中。其實(shí)go get支持自定義域名的功能,具體參見go help remote。

go install

這個(gè)命令在內(nèi)部實(shí)際上分成兩步操作:第一步是生成結(jié)果文件(可執(zhí)行文件或者.a包),第二步會把編譯好的結(jié)果移到$GOPATH/pkg或者$GOPATH/bin。

go test

執(zhí)行這個(gè)命令,會自動讀取源碼目錄下名為*_test.go的文件,生成并運(yùn)行測試用的可執(zhí)行文件。輸出的信息類似如下內(nèi)容。

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

默認(rèn)情況下,不需要任何參數(shù),它會自動把你的源碼包下面所有的test文件測試完畢,當(dāng)然你也可以帶上參數(shù),詳細(xì)內(nèi)容請參考go help testflag。

go doc

很多人說Go語言不需要任何第三方文檔,例如,chm手冊之類的(其實(shí)筆者已經(jīng)做了一個(gè)chm手冊),因?yàn)樗鼉?nèi)部就有一個(gè)很強(qiáng)大的文檔工具。

如何查看相應(yīng)的package文檔呢?如果是builtin包,那么執(zhí)行g(shù)o doc builtin;如果是http包,那么執(zhí)行g(shù)o doc net/http;查看某一個(gè)包里面的函數(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,你將會看到一個(gè)golang.org的本地副本,通過它可查詢pkg文檔等其他內(nèi)容。如果你設(shè)置了 GOPATH,在 pkg 分類下,不但會列出標(biāo)準(zhǔn)包的文檔,還會列出本地 GOPATH 中所有項(xiàng)目的相關(guān)文檔,這對于經(jīng)常被限制訪問的用戶來說是一個(gè)不錯(cuò)的選擇。

其他命令

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      編譯并運(yùn)行Go語言程序

以上這些工具還有很多參數(shù)沒有一一介紹,用戶可以使用go help 命令獲取更詳細(xì)的幫助信息。

主站蜘蛛池模板: 建平县| 噶尔县| 鄱阳县| 射阳县| 卢氏县| 云霄县| 黄龙县| 泰州市| 泾源县| 开鲁县| 兴山县| 南岸区| 郯城县| 澄迈县| 从江县| 平顶山市| 综艺| 南安市| 罗田县| 林芝县| 福泉市| 浦北县| 汉川市| 古田县| 晋州市| 栾川县| 平罗县| 宜都市| 扬中市| 上饶县| 陇南市| 综艺| 庆城县| 荥经县| 上蔡县| 额尔古纳市| 乌鲁木齐县| 澄城县| 克拉玛依市| 来凤县| 定兴县|