天天看點

3、Go版本管理工具

3、Go版本管理工具

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 version​

    ​: 擷取Go版本
  • ​go help​

    ​: 檢視Go幫助指令
  • ​go get​

    ​​: 擷取遠端包(需提前安裝​

    ​git​

    ​​或​

    ​hg​

    ​)
  • ​go build​

    ​: 編譯并生成可執行程式
  • ​go run​

    ​: 直接運作程式
  • ​go fmt​

    ​: 格式化源碼
  • ​go install​

    ​: 編譯封包件以及整個程式
  • ​go test​

    ​: go原生提供的單元測試指令
  • ​go clean​

    ​: 移除目前源碼包和關聯源碼包裡編譯生成的檔案
  • ​go tool​

    ​: 更新Go版本時,修複舊版代碼
  • ​godoc -http:80​

    ​:開啟一個本地80端口的web文檔
  • ​gdb 可執行程式名​

    ​:調試Go編譯出來的檔案

2.2 go fmt

​go fmt​

​指令可以格式化代碼檔案:

指令格式:使用go fmt指令,其實是調用了gofmt,而且需要參數-w,否則格式化結果不會寫入檔案

go fmt      

示例:格式化整個項目

gofmt -w -l src      

常見參數:

  • ​-l​

    ​: 顯示那些需要格式化的檔案
  • ​-w​

    ​: 把改寫後的内容直接寫入到檔案中,而不是作為結果列印到标準輸出。
  • ​-r​

    ​: 添加形如"a[b:len(a)] -> a[b:]"的重寫規則,友善我們做批量替換
  • ​-s​

    ​: 簡化檔案中的代碼
  • ​-d​

    ​: 顯示格式化前後的diff而不是寫入檔案,預設是false
  • ​-e​

    ​: 列印文法錯誤到标準輸出。無此參數隻會列印不同行的前10個錯誤。

2.3 go install

​go install​

​指令用來生成項目的可執行檔案。進入對應的go檔案所在的目錄執行指令可以直接生成一個可執行檔案在bin目錄,如圖:

3、Go版本管理工具

注意:

  • 添加參數​

    ​-v​

    ​,可以檢視該指令底層執行資訊
  • 如果​

    ​main.go​

    ​​中引入并使用了​

    ​expl​

    ​包,則該包的内容也被會安裝進bin目錄中
  • go檔案中如果沒有​

    ​main​

    ​​函數無法執行,這樣的檔案稱之為應用包,會被編譯為​

    ​.a​

    ​檔案,并生成在pkg檔案夾中

注意:

沒有開啟​​

​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包,執行​

    ​go build​

    ​​之後,會在目前目錄下生成一個可執行檔案。如果你需要在$GOPATH/bin下生成相應的檔案,需要執行​

    ​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      

繼續閱讀