Go語言命令列操作命令詳細介紹

2022-09-24 23:39:11 字數 3750 閱讀 3848

go 命令

go語言自帶有一套完整的命令操作工具,你可以通過在命令列中執行go來檢視它們:

圖1.3 go命令顯示詳細的資訊

這些命令對於我們平時編寫的**非常有用,接下來就讓我們了解一些常用的命令。

go build

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

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

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

3.如果某個專案資料夾下有多個檔案,而你只想編譯某個檔案,就可在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檔案,其它系統命名字尾檔案全部忽略。

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產生

我一般都是利用這個命令清除編譯檔案,然後github遞交原始碼,在本機測試的時候這些編譯檔案都是和系統相關的,但是對於原始碼管理來說沒必要。

go fmt

有過c/c++經驗的讀者會知道,一些人經常為**採取k&r風格還是ansi風格而爭論不休。在go中,**則有標準的風格。由於之前已經有的一些習慣或其它的原因我們常將**寫成ansi風格或者其它更合適自己的格式,這將為人們在閱讀別人的**時新增不必要的負擔,所以go強制了**格式(比如左大括號必須放在行尾),不按照此格式的**將不能編譯通過,為了減少浪費在排版上的時間,go工具集中提供了乙個go fmt命令 它可以幫你格式化你寫好的**檔案,使你寫**的時候不需要關心格式,你只需要在寫完之後執行go fmt 檔名》.go,你的**就被修改成了標準格式,但是我平常很少用到這個命令,因為開發工具裡面一般都帶了儲存時候自動格式化功能,這個功能其實在底層就是呼叫了go fmt。接下來的一節我將講述兩個工具,這兩個工具都自帶了儲存檔案時自動化go fmt功能。

複製** **如下:

使用go fmt命令,更多時候是用gofmt,而且需要引數-w,否則格式化結果不會寫入檔案。gofmt -w src,可以格式化整個專案。

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 能正常工作,你必須確保安裝了合適的原始碼管理工具,並同時把這些命令qezqwhorr加入你的path中。其實go get支援自定義網域名稱的功能,具體參見go help remote。

go install

這個命令在內部實際上分成了兩步操作:程式設計客棧第一步是生成結果檔案(可執行檔案或者.a包),第二步會把編譯好的結果移到$gopath/pkg或者$gopath/bin。

go test

執行這個命令,會自動讀取原始碼目錄下面名為*_test.go的檔案,生成並執行測試用的可執行檔案。輸出的資訊類似

複製** **如下:

ok   archive/tar   0.011s

fail archive/zip   0.022s

ok程式設計客棧   compress/gzip 0.033s

...預設的情況下,不需要任何的引數,它會自動把你原始碼包下面所有test檔案測試完畢,當然你也可以帶上引數,詳情請參考go help testflag

go doc

(1.2rc1 以後沒有 go doc 指令, 只留下 godoc 指令) 很多人說go不需要任何的第三方文件,例如chm手冊之類的(其實我已經做了乙個了,chm手冊),因為它內部就有乙個很強大的文件工具。

如何檢視相應package的文件呢? 例如builtin包,那麼執行go doc builtin 如果是http包,那麼執行go doc net/http 檢視某乙個包裡面的函式,那麼執行godoc fmt printf 也可以檢視相應的**,執行godoc -src fmt printf

通過命令在命令列執行 godoc -http=:埠號 比如godoc -http=:8080。然後在瀏覽器中開啟127.0.0.1:8080,你將會看到乙個golang.org的本地copy版本,通過它你可以查詢pkg文件等其它內容。如果你設定了gopath,在pkg分類下,不但會列出標準包的文件,還會列出你本地gopath中所有專案的相關文件,這對於經常被牆的使用者來說是乙個不錯的選擇。

其它命令

go還提供了其它很多的工具,例如下面的這些工具

複製** **如下:

go fix 用來修復以前老版本的**到新版本,例如go1之前老版本的**轉化到go1

go version 檢視go當前的版本

go env 檢視當前go的環境變數

go list 列出當前全部安裝的package

go run 編譯並執行go程式

以上這些工具還有很多引數沒有一一介紹,使用者可以使用go help 命令獲取更詳細的幫助資訊。

本文標題: go語言命令列操作命令詳細介紹

本文位址: /jiaoben/golang/115405.html

Go語言命令列工具介紹 3

用於編譯原始碼檔案 包 依賴包 1.1 編寫源 test.gopackage main import fmt time func main 1.2 執行 go buildgo build test.go將 test.go 源 編譯完成之後,src目錄下會新增編譯完成之後的test可執行檔案,如下圖所...

Go語言 flag Go的命令列引數 命令列處理

1.命令列引數 命令列引數是指定程式執行引數的乙個常見方式。例如,go run hello.go,程式 go 使用了 run 和 hello.go 兩個引數。package main import os import fmt func main 要實驗命令列引數,最好先使用 go build 編譯乙...

GO 命令列 編譯命令

go111module 在go語言 1.12 版本之前,要啟用 go module 工具首先要設定環境變數 go111module,不過在go語言 1.13 及以後的版本則不再需要設定環境變數。通過 go111module 可以開啟或關閉 go module 工具。windows 下開啟 go111...