
3、Go版本管理工具
- 1、Go版本管理工具
- 2、常用Go指令
- 2.1 常用指令彙總
- 2.2 go fmt
- 2.3 go install
- 2.4 go tool
- 2.5 go get
- 2.6 go build
1、Go版本管理工具
Go也有支援多版本管理的工具,例如:gvm(https://github.com/moovweb/gvm)
使用方式如下:
- 安裝gvm
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
- 安裝
gvm install
- 切換go版本
gvm use go1.18 # 使用參數 --default,可以每次啟動不需要調用use
2、常用Go指令
2.1 常用指令彙總
-
: 擷取Go版本go version
-
: 檢視Go幫助指令go help
-
: 擷取遠端包(需提前安裝go get
或git
)hg
-
: 編譯并生成可執行程式go build
-
: 直接運作程式go run
-
: 格式化源碼go fmt
-
: 編譯封包件以及整個程式go install
-
: go原生提供的單元測試指令go test
-
: 移除目前源碼包和關聯源碼包裡編譯生成的檔案go clean
-
: 更新Go版本時,修複舊版代碼go tool
-
:開啟一個本地80端口的web文檔godoc -http:80
-
:調試Go編譯出來的檔案gdb 可執行程式名
2.2 go fmt
go fmt
指令可以格式化代碼檔案:
指令格式:使用go fmt指令,其實是調用了gofmt,而且需要參數-w,否則格式化結果不會寫入檔案
go fmt
示例:格式化整個項目
gofmt -w -l src
常見參數:
-
: 顯示那些需要格式化的檔案-l
-
: 把改寫後的内容直接寫入到檔案中,而不是作為結果列印到标準輸出。-w
-
: 添加形如"a[b:len(a)] -> a[b:]"的重寫規則,友善我們做批量替換-r
-
: 簡化檔案中的代碼-s
-
: 顯示格式化前後的diff而不是寫入檔案,預設是false-d
-
: 列印文法錯誤到标準輸出。無此參數隻會列印不同行的前10個錯誤。-e
2.3 go install
go install
指令用來生成項目的可執行檔案。進入對應的go檔案所在的目錄執行指令可以直接生成一個可執行檔案在bin目錄,如圖:
注意:
- 添加參數
,可以檢視該指令底層執行資訊-v
- 如果
中引入并使用了main.go
包,則該包的内容也被會安裝進bin目錄中expl
- go檔案中如果沒有
函數無法執行,這樣的檔案稱之為應用包,會被編譯為main
檔案,并生成在pkg檔案夾中.a
注意:
沒有開啟
go mod
時,使用上述指令需要配置
GOPATH
,否則會報:
no install location
。
2.4 go tool
go tool下聚集了很多指令,主要有2個,即fix和vet:
-
:用來修複以前老版本的代碼到新版本go tool fix .
-
:分析目前目錄的代碼是否正确go tool vet directory|files
2.5 go get
go get
用來擷取遠端倉庫中的包,使用該指令前必須配置GOPATH,而且依據不同的源碼網站,還要安裝不同的版本管理工具,比如從github上使用
go get
需要額外安裝git。
示例:
下載下傳包:添加 -u 參數可以自動更新包和依賴
go get github.com/**/**
使用包:與普通包使用方式一緻
import "github.com/****/****"
go get
本質上可以了解為通過源碼工具clone下代碼後,執行了
go install
。
由于一些原因,有的包無法下載下傳,如包
"golang.org/x/sync/syncmap"
,可以在src目錄下執行下面的操作:
mkdir -p golang.org/x/
cd golang.org/x/
git
2.6 go build
go build
用于編譯代碼,在編譯過程中,會同時編譯與之相關聯的包。
- 如果是main包,執行
之後,會在目前目錄下生成一個可執行檔案。如果你需要在$GOPATH/bin下生成相應的檔案,需要執行go build
,或者使用go install
go build -o 路徑/a.exe
- 如果是普通包,執行go build之後,它不會産生任何檔案
- 該指令預設會編譯目前目錄下的所有go檔案,如果隻想編譯某個檔案,可使用
go build exp.go
-
會忽略目錄下以go build
或_
開頭的go檔案.
如果go build報錯:
/usr/lib/go-1.10/pkg/tool/linux_amd64/link: running gcc failed: exit status 1
/tmp/go-link-008006128/000026.o: In function _cgo_05dc84caff82_Cfunc_sysconf': /tmp/go-build/cgo-gcc-prolog:32: multiple definition of_cgo_05dc84caff82_Cfunc_sysconf’
/tmp/go-link-008006128/000024.o:/tmp/go-build/cgo-gcc-prolog:32: first defined here
collect2: error: ld returned 1 exit
linux: export CGO_ENABLED=0
windows : cmd: set CGO_ENABLED=0
windows : powershell:$env:CGO_ENABLED=0