概述
優(yōu)秀的工具配合熟練的使用,往往可以讓開發(fā)效率大幅度提升,本小節(jié)介紹 Go 里面經(jīng)常使用到的命令行工具。
install
go install
命令編譯并安裝指定的包以及對(duì)應(yīng)的依賴包。
# 安裝 golint 包
$ go install golang.org/x/lint/golint@latest
# go: downloading golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7
# 一般會(huì)直接將命令放入 $GOPATH/bin
$ which golint
# /home/codes/go/bin/golint
get
go get
命令將指定的包以及對(duì)應(yīng)的依賴包加入到當(dāng)前 module
。
go get
和 go install
主要區(qū)別在于: install
是命令的全局安裝,不會(huì)將包及其依賴加入到當(dāng)前 module
。
需要注意的一點(diǎn)是: 每個(gè)包都有對(duì)應(yīng)的 Go 版本以及其他包依賴,如果指定了包的版本號(hào),但是當(dāng)前 Go 版本或者依賴包的版本不滿足條件,將無法安裝 。
添加最新可用包
# 獲取 golint 包, -u 參數(shù)表示獲取指定的包的依賴項(xiàng),以便在包有新的版本可用時(shí)使用
# 如果包名稱后面不加 `@版本號(hào)`,則默認(rèn)為 `latest` 最新可用的
$ go get -u golang.org/x/lint/golint
# go: added golang.org/x/lint v0.0.0-20210508222113-6edffad5e616
# go: added golang.org/x/tools v0.3.0
# go.mod 中依賴項(xiàng)已經(jīng)更新
$ cat go.mod
# 輸出如下:
module helloworld
go 1.19
require (
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 // indirect
golang.org/x/tools v0.3.0 // indirect
)
添加指定可用包
# 指定包的版本號(hào)為 @v1.4.1
$ go get -u github.com/spf13/cast@v1.4.1
# go: added github.com/spf13/cast v1.4.1
# go.mod 中依賴項(xiàng)已經(jīng)更新
$ cat go.mod
# 輸出如下:
module helloworld
go 1.19
require (
github.com/spf13/cast v1.4.1 // indirect
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 // indirect
golang.org/x/tools v0.3.0 // indirect
)
mod
go mod
命令管理 module
相關(guān)操作。
子命令
go mod init # 初始化
go mod tidy # 更新 (移除) 依賴文件
go mod download # 下載依賴文件
go mod vendor # 將依賴全部歸檔到 vendor 目錄
go mod edit # 修改依賴文件
go mod graph # 打印依賴關(guān)系 圖
go mod verify # 校驗(yàn)依賴
clean
go clean
命令刪除執(zhí)行其他命令時(shí)產(chǎn)生的目標(biāo)和緩存文件。
list
go list
命令展示 module
或包的信息。
示例
# 不帶參數(shù),展示 module
$ go list
# helloworld
# 展示某個(gè)包的信息
$ go list golang.org/x/lint/golint
# 默認(rèn)只輸出包名
# golang.org/x/lint/golint
# 獲取詳細(xì)信息,并以 json 格式輸出
$ go list -json golang.org/x/lint/golint
{
"Dir": "/home/codes/go/pkg/mod/golang.org/x/lint@v0.0.0-20210508222113-6edffad5e616/golint",
"ImportPath": "golang.org/x/lint/golint",
"Name": "main",
...
...
}
# 獲取包的路徑
$ go list -f '{{.Dir}}' golang.org/x/lint/golint
# /home/codes/go/pkg/mod/golang.org/x/lint@v0.0.0-20210508222113-6edffad5e616/golint
# 切換路徑到包的目錄
$ cd $(go list -f '{{.Dir}}' golang.org/x/lint/golint)
$ pwd
# /home/codes/go/pkg/mod/golang.org/x/lint@v0.0.0-20210508222113-6edffad5e616/golint
fix
go fix
命令將指定代碼包里面所有的 Go 標(biāo)準(zhǔn)庫函數(shù)從低版本升級(jí)到高版本,自動(dòng)實(shí)現(xiàn)兼容性。
筆者沒有使用過這個(gè)命令,感興趣的讀者可以找一個(gè)第三方包的低級(jí)版本,然后嘗試一下使用 go fix
升級(jí)。
格式化
goimports
goimports
命令可以對(duì)代碼格式化,同時(shí),它可以自動(dòng)更新導(dǎo)入包的 路徑和順序
,并且自動(dòng)刪除未使用的包。
# 安裝 goimports
$ go install golang.org/x/tools/cmd/goimports@latest
# 格式化單個(gè)文件
$ goimports -w main.go
# 格式化整個(gè)目錄
$ goimports -w foo
文檔
go doc
go doc
命令可以查看包的文檔。
# 查看 time.Now() 方法文檔
$ go doc time.Now
# 輸出如下
package time // import "time"
func Now() Time
Now returns the current local time.
# 查看 fmt.Printf() 方法文檔
$ go doc fmt.Printf
# 輸出如下
package fmt // import "fmt"
func Printf(format string, a ...any) (n int, err error)
Printf formats according to a format specifier and writes to standard
output. It returns the number of bytes written and any write error
encountered.
除此之外,也可以直接查看某個(gè)包的文檔
$ go doc strconv
# 輸出省略
package strconv // import "strconv"
...
...
func Unquote(s string) (string, error)
func UnquoteChar(s string, quote byte) (value rune, multibyte bool, tail string, err error)
type NumError struct{ ... }
godoc
godoc 用來
提取和生成
文檔,而且還有一個(gè)很強(qiáng)大的功能: 將文檔在瀏覽器內(nèi)打開,實(shí)現(xiàn)離線文檔的效果。
# 瀏覽器訪問 Go 文檔
$ godoc -http=localhost:6060
# 打開瀏覽器,訪問 localhost:6060,可以看到 Go 所有包的文檔
godoc 瀏覽器文檔
關(guān)于 提取文檔
的功能,限于篇幅,筆者這里不再做介紹,感興趣的讀者可以自行查閱 godoc
文檔。
swaggo
Swag 通過 Go 代碼注釋生成標(biāo)準(zhǔn) Swagger 文檔,通過其內(nèi)置的插件,可以快速與現(xiàn)有項(xiàng)目集成。
# 安裝
$ go install github.com/swaggo/swag/cmd/swag@latest
# 查看版本
$ swag version
# swag version v1.8.7
限于篇幅,具體的使用方法筆者這里不再做介紹,讀者可以參考 附錄 2 的 Github 主頁文檔,下面是一個(gè)生成的文檔頁面:
swag
lint
golangci-lint
golangci-lint 是一個(gè)快速的 Go linters 運(yùn)行器,可以并行運(yùn)行 linters 并使用緩存,支持 yaml 配置與主流 IDE 集成,包含了數(shù)十個(gè) linters 。
這是官網(wǎng)的介紹, 簡單來說,golangci-lint
是 靜態(tài)分析工具集大成者
,包含了幾乎所有的主流分析工具, 如 errcheck
, govet
, statischeck
, unused
等,也就是說: 靜態(tài)分析工具,有這一個(gè)就夠了。
限于篇幅,具體的使用方法筆者這里不再做介紹,讀者可以參考 附錄 4 的官方文檔。
小結(jié)
本小節(jié)主要介紹了常用的 Go 內(nèi)置命令行工具,此外,順帶著介紹了文檔生成工具 swaggo
, 靜態(tài)分析工具 golangci-lint
, 這些都是日常開發(fā)必備工具,建議讀者參照文檔多加練習(xí),做到熟練掌握。
-
go語言
+關(guān)注
關(guān)注
1文章
157瀏覽量
9016
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論