罕见的 Go CLI 命令 (5/5):查看文档与依赖

不敢说文档是代码的灵魂,但也至少可以算是发肤。本文主要看一下如何使用 Go 提供的 CLI 命令查看项目文档以及检查依赖关系。

1. 查看文档

一般我们习惯打开 pkg.go.dev 查看文档,但其实 Go 也提供了 go doc 命令在终端查看文档。可以使用以下格式:

bash 复制代码
go doc <pkg>
go doc <sym>[.<methodOrField>]
go doc [<pkg>.]<sym>[.<methodOrField>]
go doc [<pkg>.][<sym>.]<methodOrField>

以上来自 go help doc 命令的说明。

go doc 不仅支持查找标准库文档,也支持自定义包。可以通过 . 连接包名、结构体或接口以访问其字段或方法,以 gin 为例:

bash 复制代码
# 准备
git clone git@github.com:gin-gonic/gin.git && cd gin

# 查看当前项目文档
go doc
# 输出的第一行为:package gin // import "github.com/gin-gonic/gin"
# 来自 Gin 目录内的 doc.go 文件,对于大型项目,这是一个约定

如果第三方包中包含的 func 或 type 和标准库中的没有冲突,那么可以直接使用 go doc <func/type/struct> 命令:

bash 复制代码
go doc Param # 查看 Gin 的 Param type

单如果和标准库有冲突,需要添加路径,一般来说为避免歧义,在第三方包使用 go doc 命令时建议总是包含路径:

bash 复制代码
go doc Context # 来自标准库的 Context
go doc . Context # 来自 Gin 的 Context

# 支持点号访问子集
go doc . Context.Param

Go 官方对文档有一个比较详细的介绍 Go Doc Comments,另外提供了 pkg.go.dev/go/doc 包供相关使用。

2. 查看依赖

go list 是 Go CLI 工具集中的一个命令,可以获取有关包的各种信息,如导入路径、目录位置、依赖关系等。基本用法如下:

bash 复制代码
go list [flags] [packages]

其中,[flags] 是一些选项,[packages] 是要列出信息的包的导入路径。通过不同的选项,可以获取不同格式的输出信息,如 JSON 格式、指定字段等。

常见用法包括:

bash 复制代码
# 同样以 Gin 为例
git clone git@github.com:gin-gonic/gin.git && cd gin

# 展示当前 package path,多用于工具或自动化脚本的命令
go list

# 查看包的所有依赖
go list -deps

# 查看所有依赖的包名,使用 Go 的模版语法
go list -deps -f {{.Name}}

go list 命令默认是 package 模式,可以切换到 module 模式:

bash 复制代码
go list -m

# 查看主 module 及其所有依赖的导入路径
go list -m all

# 查看依赖的版本
go list -m -versions github.com/golang/protobuf

通过 go help list 命令可以查看更多关于 go list 的详细信息和用法说明。go list 在 Go 开发中还是比较有用的,可以帮助我们更好地管理和了解项目中的包信息。

有时候我们为了一个并不太复杂的功能而想要轻易引入一个包的时候,可以看一下这个包又依赖了多少别的包,有没有风险,值不值得这样做。

总结

之前在使用 Go 的过程中,常用的也就是 build,run,test 以及 get 等基本命令,本系列文章通过对 Go 提供的 CLI 命令从构建、插件、运行时、项目管理、文档五个方面进行了全面的总结,虽然稍微流于表面,并未深入,但重在入门。

每一门语言都有其独到之处,也有无尽的精彩等待探索。

相关推荐
JaguarJack11 分钟前
PHP 标准库的价值远不止少写几行代码
后端·php·服务端
鶴哥只手遮天31 分钟前
《Redis 8.10.3 深度剖析》系列 · 第 1 章·全景与源码地图:版本谱系、构建体系、全局状态与启动链路
redis·后端·开源
用户4003150433531 分钟前
《从 skynet.timeout 到回调执行:Skynet 分层时间轮源码剖析》
后端
一条Go36 分钟前
四个进程,一把锁:Alioth 的告警评测为什么不需要消息队列
后端·设计模式·架构
用户1996143559961 小时前
插件是怎么被安全装进系统的
后端
愚农搬码1 小时前
自研表单引擎、开源组件二开和商业产品,企业应该如何选择?
后端
用户298698530141 小时前
Python 自动化处理 Word 页眉页脚的几种典型场景
后端·python·api
愚农搬码2 小时前
一款企业级电子表单系统应该具备哪些功能?
后端
我不会起名字3222 小时前
Redis 从 0 到 1(二十七):JSON 体积是 Protobuf 的 3.7 倍?3 种序列化的 Go 基准测试
redis·go·序列化·protobuf·messagepack
Rain的Java大神之路2 小时前
国家数据集团校招、社招都开了:总部雄安,这些技术岗值得认真看看
java·后端·面试