年底就要到了。 是时候清理存储库改善工具集了。 所有知名的工具已经安装好-还有什么工具需要添加到工具箱吗?
有一些有用的工具可能没有在你的工具箱里:interfacer,zb,realize 和 binstale。 他们没有什么共同之处,但他们中每一个都可以解决特定的问题。
interfacer 有一个非常明确的用途:查看函数的参数,并指出可以用接口类型替换的那些参数。
interfacer
,它会告诉你答案。想象有一天,你开始写一个BBQ传感器库来控制感恩节火鸡的温度。 这个库中包含由 Alerter函数组成的 Alerter 接口和一个实现 Alerter 的 Sensor 结构。
type Alerter interface {
Alert()
}
type Sensor struct{}
func (Sensor) Alert() {
fmt.Println("Turkey is done!")
}
几个小时几千行后(是的,你感觉这一天富有成效)你定义一个函数 sensorAlert 期望接收一个Sensor 结构并调用其 Alert 方法。
func sensorAlert(s Sensor) {
s.Alert()
}
$ interfacer bbq.go
得到了这条建议:
bbq.go:15:18: s can be Alerter
你快速调整了 sensorAlert 函数然后上床,因为现在你知道明天写测试时可以轻松地传递 MockSensor 结构到 sensorAlert。
在你完成一些最新项目的工作之后,运行 gometalinter
。 它需要一些时间来完成,这时你发现一些lint 工具已经深入到vendor目录,现在的输出包含很多无用的消息。
go build
,结果观察到测试失败了。 啊,忘了运行 go generate
。当你解决这个问题时,你意识到时间已经过去了,所以你希望你的工具更快,更智能。zb
可以帮你解决这个问题.与以前的工具相反,zb是一个小型瑞士军刀。 它提供了一堆命令来加速你的开发/构建/测试周期。 其中的一些亮点如下:
vendor
目录,并保留了一些不在vendor中的操作(例如,linting)。标准的go工具 – go build
, go test
,等是快速和简单的,但随着你的项目越来越大,越来越复杂,你开始希望某种程度上的自动化,即每次保存一个源文件时触发所有的编译和测试工具。
realize
是你的朋友。激活 go build
, test
, run
, generate
, fmt
等只是在配置文件中反转一些布尔型的开关(而不是指定完整的命令行)。此外,你可以添加自定义命令进行预处理和后处理,设置路径忽略,保存输出,日志或构建中的错误流等等。除了多彩的输出外壳(你可以通过颜色快速地区分构建的成功与否), realize
还有一个在浏览器窗口中监视所有构建进程的Web UI。realize on GitHub你知道 $GOPATH/bin
目录中的二进制文件是否仍然是最新的吗?使用 go get 命令愉快地安装一个又一个二进制文件,然后它们开始蒙尘。 在某一时刻你记得你曾经安装了一个帮你做某事的很好的工具,最终你在$GOPATH/bin里找到了它
,但它并不好用并提示了一些不可理解的错误信息。
你确定它的运行没有问题,那么,也许二进制文件过时了? 你决定尝试更新源代码。
你在$GOPATH/bin
中进行递归搜索来查找与二进制文件同名的仓库。 最终你发现了这个仓库在这里执行 go get。 这样做修复了你的二进制文件,你觉得很轻松…
$GOPATH/bin
目录中可能有几十个旧的二进制文件!Meet binstale
.这个小工具可以立即告诉你一个给定的 go-gettable二进制文件是否需要更新。
$ binstale realize
realize
STALE: github.com/tockins/realize (build ID mismatch)
如果你再多花一两分钟,它可以对所有的二进制文件执行同样的操作。
$ binstale
CanvasStreamTest
STALE: github.com/cryptix/CanvasStreamTest (build ID mismatch)
Go-Package-Store
STALE: github.com/shurcooL/Go-Package-Store (build ID mismatch)
aligncheck
STALE: github.com/alecthomas/gometalinter/vendor/src/github.com/opennota/check/cmd/aligncheck (build ID mismatch)
STALE: github.com/opennota/check/cmd/aligncheck (build ID mismatch)
asmfmt
STALE: github.com/klauspost/asmfmt/cmd/asmfmt (build ID mismatch)
balancedtree
STALE: github.com/appliedgo/balancedtree (build ID mismatch)
benchcmp
STALE: code.google.com/p/go.tools/cmd/benchcmp (build ID mismatch)
STALE: golang.org/x/tools/cmd/benchcmp (build ID mismatch)
benchstat
STALE: rsc.io/benchstat (build ID mismatch)
binstale
STALE: github.com/shurcooL/binstale (build ID mismatch)
bug
STALE: github.com/driusan/bug (build ID mismatch)
...
结论
这些只是稳定增长的基于命令行的工具中的一些例子,它们使开发人员的开发变得更容易。
如果你有一个很酷的想法,不要犹豫,坐下把它写出来。 但首先,一定要检查公共库 – 可能你想到的工具已经存在于某个地方,感谢繁荣的Go社区。
原文地址:https://coyee.com/article/11570-some-tools-for-go-that-you-might-not-know-yet