0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

介绍Go里面经常使用到的命令行工具

冬至子 来源:洋芋土豆 作者:真没什么深度 2023-05-22 16:58 次阅读

概述

优秀的工具配合熟练的使用,往往可以让开发效率大幅度提升,本小节介绍 Go 里面经常使用到的命令行工具。

install

go install 命令编译并安装指定的包以及对应的依赖包。

# 安装 golint 包
$ go install golang.org/x/lint/golint@latest
# go: downloading golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7

# 一般会直接将命令放入 $GOPATH/bin
$ which golint
# /home/codes/go/bin/golint

get

go get 命令将指定的包以及对应的依赖包加入到当前 module

go getgo install 主要区别在于: install 是命令的全局安装,不会将包及其依赖加入到当前 module

需要注意的一点是: 每个包都有对应的 Go 版本以及其他包依赖,如果指定了包的版本号,但是当前 Go 版本或者依赖包的版本不满足条件,将无法安装

添加最新可用包

# 获取 golint 包, -u 参数表示获取指定的包的依赖项,以便在包有新的版本可用时使用
# 如果包名称后面不加 `@版本号`,则默认为 `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 中依赖项已经更新 
$ 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
)

添加指定可用包

# 指定包的版本号为 @v1.4.1 
$ go get -u github.com/spf13/cast@v1.4.1 
# go: added github.com/spf13/cast v1.4.1

# go.mod 中依赖项已经更新 
$ 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 相关操作。

子命令

go mod init  # 初始化
go mod tidy  # 更新 (移除) 依赖文件
go mod download  # 下载依赖文件

go mod vendor  # 将依赖全部归档到 vendor 目录
go mod edit    # 修改依赖文件
go mod graph   # 打印依赖关系 图
go mod verify  # 校验依赖

clean

go clean 命令删除执行其他命令时产生的目标和缓存文件。

list

go list 命令展示 module 或包的信息

示例

# 不带参数,展示 module
$ go list
# helloworld

# 展示某个包的信息
$ go list golang.org/x/lint/golint
# 默认只输出包名
# golang.org/x/lint/golint

# 获取详细信息,并以 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 标准库函数从低版本升级到高版本,自动实现兼容性。

笔者没有使用过这个命令,感兴趣的读者可以找一个第三方包的低级版本,然后尝试一下使用 go fix 升级。

格式化

goimports

goimports 命令可以对代码格式化,同时,它可以自动更新导入包的 路径和顺序,并且自动删除未使用的包。

# 安装 goimports
$ go install golang.org/x/tools/cmd/goimports@latest

# 格式化单个文件
$ goimports -w main.go

# 格式化整个目录
$ 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.

除此之外,也可以直接查看某个包的文档

$ 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 用来 提取和生成 文档,而且还有一个很强大的功能: 将文档在浏览器内打开,实现离线文档的效果。

# 浏览器访问 Go 文档
$ godoc -http=localhost:6060
# 打开浏览器,访问 localhost:6060,可以看到 Go 所有包的文档

图片

godoc 浏览器文档

关于 提取文档 的功能,限于篇幅,笔者这里不再做介绍,感兴趣的读者可以自行查阅 godoc 文档。

swaggo

Swag 通过 Go 代码注释生成标准 Swagger 文档,通过其内置的插件,可以快速与现有项目集成。

# 安装
$ go install github.com/swaggo/swag/cmd/swag@latest
# 查看版本
$ swag version 
# swag version v1.8.7

限于篇幅,具体的使用方法笔者这里不再做介绍,读者可以参考 附录 2 的 Github 主页文档,下面是一个生成的文档页面:

图片

swag

lint

golangci-lint

golangci-lint 是一个快速的 Go linters 运行器,可以并行运行 linters 并使用缓存,支持 yaml 配置与主流 IDE 集成,包含了数十个 linters 。

这是官网的介绍, 简单来说,golangci-lint静态分析工具集大成者,包含了几乎所有的主流分析工具, 如 errcheck, govet, statischeck, unused 等,也就是说: 静态分析工具,有这一个就够了。

限于篇幅,具体的使用方法笔者这里不再做介绍,读者可以参考 附录 4 的官方文档。

小结

本小节主要介绍了常用的 Go 内置命令行工具,此外,顺带着介绍了文档生成工具 swaggo, 静态分析工具 golangci-lint, 这些都是日常开发必备工具,建议读者参照文档多加练习,做到熟练掌握。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • go语言
    +关注

    关注

    1

    文章

    157

    浏览量

    8930
收藏 人收藏

    评论

    相关推荐

    在STM32实现命令行

    工作中的开发环境都是基于linux命令行交互,作为命令行的重度使用者,玩单片机也要使用命令行工具,百度了一些命令行
    发表于 12-09 11:32 1623次阅读

    Linux命令行工具

    Linux 新手往往对命令行心存畏惧。部分原因是因为需要记忆大量的命令,毕竟掌握命令是高效使用命令行的前提不幸的是,学习这些命令并无捷径,
    发表于 07-25 08:10

    linux命令行下载工具

    wget是linux下常用的命令行下载工具,是Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件。而tget是一个简单的命令行
    发表于 07-25 07:02

    Mini shell命令行调试工具的相关资料分享

    @mini shell命令行调试工具介绍Mini shell 命令行调试工具(单片机、c语言)Mini shell是一个特别适合低内存的单片
    发表于 01-24 08:15

    caxa命令行中的应用

    caxa命令行中的应用 命令行对于大多用户来说往往只是输入数据的作用,但是其中的奥妙还有很多,下面就给大家
    发表于 10-18 18:18 2165次阅读

    监控jvm常用的5个命令行工具

    常用的几个命令行工具有jps、jstat、jinfo、jmap、jstack等。这几个工具可以安装openjdk-devel-debug包。
    的头像 发表于 02-06 14:47 5578次阅读
    监控jvm常用的5个<b class='flag-5'>命令行</b><b class='flag-5'>工具</b>

    实用 Linux 命令行使用技巧集锦

    下面介绍的都是一些命令行工具,这些工具在日常工作中都很有用。
    的头像 发表于 03-21 14:42 4494次阅读

    Xilinx软件命令行工具:XSCT开发和调试

    了解如何使用XSCT,Xilinx软件命令行工具进行开发和调试。 该视频演示了XSCT如何充当Xilinx SDK的命令行控制台。
    的头像 发表于 11-21 06:02 1.3w次阅读

    Xilinx软件命令行工具进行开发和调试

    了解如何使用XSCT,Xilinx软件命令行工具进行开发和调试。 该视频演示了XSCT如何充当Xilinx SDK的命令行控制台。
    的头像 发表于 11-22 06:53 6104次阅读

    Git常见的误区和命令行工具等综述

    Git常见的误区和命令行工具等综述
    发表于 08-31 09:51 0次下载

    自己动手实现命令行解析器

    一、介绍嵌入式里面经常会自己做命令行,这里分享一个命令解析器代码实现二、代码实现mycmd.c
    发表于 12-22 18:51 13次下载
    自己动手实现<b class='flag-5'>命令行</b>解析器

    Golang基于flag库实现一个命令行工具

    Golang 标准库中的 flag 库提供了解析命令行选项的能力,我们可以基于此来开发命令行工具
    的头像 发表于 10-28 09:26 978次阅读

    新的开源命令行工具west

    电子发烧友网站提供《新的开源命令行工具west.zip》资料免费下载
    发表于 11-11 09:25 0次下载
    新的开源<b class='flag-5'>命令行</b><b class='flag-5'>工具</b>west

    idea如何输入命令行参数

    在许多软件开发和系统管理的任务中,我们经常需要向应用程序传递命令行参数。命令行参数是在运行时传递给程序的值,用于指定程序的行为和配置选项。本文将详细介绍如何在不同的编程语言和操作系统中
    的头像 发表于 12-06 15:01 373次阅读

    HarmonyOS开发:【基于命令行(安装库和工具集)】

    使用命令行进行设备开发时,可以通过以下步骤安装编译OpenHarmony需要的库和工具
    的头像 发表于 04-25 21:03 34次阅读
    HarmonyOS开发:【基于<b class='flag-5'>命令行</b>(安装库和<b class='flag-5'>工具</b>集)】