go命令是一個命令行程序因篇,用于管理Go開發(fā)泞辐。
它支持構建,運行和測試代碼竞滓,以及各種其他與Go相關的任務咐吼。
go fmt
為了保持代碼的一致性并消除代碼格式化方面的爭論,Go提供了go fmt工具商佑。
格式化文件:go fmt main.go
或目錄中的所有文件:fmt myProject
也可以使用gofmt -s
(而不是fmt)來嘗試簡化代碼汽烦。
gofmt(不是go fmt)也可以用于重構代碼。 它了解Go語法莉御,因此它比搜索和替換功能更強大撇吞。 例如,給定該程序(main.go):
package main
type Example struct {
Name string
}
func (e *Example) Original(name string) {
e.Name = name
}
func main() {
e := &Example{"Hello"}
e.Original("Goodbye")
}
可以使用gofmt將方法Original替換為Refactor:
$ gofmt -r 'Original -> Refactor' -d main.go
這將產(chǎn)生差異:
-func (e *Example) Original(name string) {
+func (e *Example) Refactor(name string) {
e.Name = name
}
func main() {
e := &Example{"Hello"}
- e.Original("Goodbye")
+ e.Refactor("Goodbye")
}
go run
go run會在不創(chuàng)建可執(zhí)行文件的情況下運行程序礁叔。 對開發(fā)最有用牍颈。 run將僅執(zhí)行軟件包名稱為main的軟件包。
為了演示琅关,我們將使用一個簡單的Hello World示例main.go:
package main
import fmt
func main() {
fmt.Println("Hello, World!")
}
無需編譯即可執(zhí)行:go run main.go
包中運行多個文件
如果程序分為多個文件煮岁,則必須提供所有文件:
$ go run main.go assets.go
go build
go build會將程序編譯為可執(zhí)行文件讥蔽。
為了演示,我們將使用一個簡單的Hello World示例main.go:
package main
import fmt
func main() {
fmt.Println("Hello, World!")
}
編譯程序運行: go build main.go
build將創(chuàng)建一個可執(zhí)行程序画机,在這種情況下:main或main.exe冶伞。 然后運行此文件以查看輸出Hello,World!步氏。 還可以將其復制到未安裝Go的類似系統(tǒng)上响禽,使其可執(zhí)行并在其中運行。
在構建中指定操作系統(tǒng)或體系結構:
可以在構建之前修改環(huán)境來指定要構建的系統(tǒng)或體系結構:
$ env GOOS=linux go build main.go # builds for Linux
$ env GOARCH=arm go build main.go # builds for ARM architecture
構建多個文件
如果將軟件包拆分為多個文件荚醒,并且軟件包名稱為main(即芋类,它不是可導入的軟件包),則必須指定要構建的所有文件:
$ go build main.go assets.go # outputs an executable: main
build一個包
要構建一個名為main的軟件包界阁,可以簡單地使用:
$ go build . # outputs an executable with name as the name of enclosing folder
go clean
go clean將刪除運行go build時創(chuàng)建的臨時文件侯繁。
它還將清除Makefiles中剩余的文件。
go get
go get下載由導入路徑命名的軟件包及其依賴項泡躯。然后贮竟,它會安裝命名的軟件包,例如“ go install”较剃。 Get還接受構建標志來控制安裝咕别。
去獲取github.com/maknahar/phonecountry
簽出新軟件包時,get將創(chuàng)建目標目錄 GOPATH / bin中安裝編譯的二進制文件弓颈。
在簽出或更新軟件包時,get查找與本地安裝的Go版本匹配的分支或標記删掀。最重要的規(guī)則是翔冀,如果本地安裝正在運行版本“ go1”,請獲取搜索名為“ go1”的分支或標記的方法披泪。如果不存在這樣的版本纤子,它將獲取軟件包的最新版本。
使用go get時款票,-d標志使它下載但不安裝給定的軟件包控硼。 -u標志將允許它更新程序包及其依賴項。
永遠不要檢出或更新存儲在供應商目錄中的代碼艾少。
go env
go env [var ...]打印有關影響Go工具行為的環(huán)境變量的信息卡乾。
$ go env
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/vikashkv/work"
GORACE=""
GOROOT="/usr/local/Cellar/go/1.7.4_1/libexec"
GOTOOLDIR="/usr/local/Cellar/go/1.7.4_1/libexec/pkg/tool/darwin_amd64"
CC="clang"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/xf/> t3j24fjd2b7bv8c9gdr_0mj80000gn/T/go-build785167995=/tmp/go-build -gno-record-gcc-switches -fno-common"
CXX="clang++"
CGO_ENABLED="1"
如果給定一個或多個變量名作為參數(shù),它將在每個行上打印每個命名變量的值缚够。
$ go env GOOS GOPATH
darwin
/Users/vikashkv/work