类推这个问题 https://stackoverflow.com/questions/10858787/what-are-the-uses-for-tags-in-go关于标签,我注意到除了纯粹的评论之外,评论还有多种用途。
例子:
-
去:生成 https://blog.golang.org/generate可用于代码生成。
-
godoc https://blog.golang.org/godoc-documenting-go-code使用函数名称来指示它应该解释的注释
-
build https://golang.org/pkg/go/build/限制条件
还有其他我错过的吗?
有没有明确的清单?
一些第三方软件包,例如合约 https://github.com/Parquery/gocontracts and 趾高气昂 https://github.com/go-swagger也使用它们。他们怎样才能避免彼此冲突呢?
如前所述注释是 go 中的指令 http://news.ycombinator.com/item?id=9522973不仅仅是评论。
在撰写本文时,还没有明确的清单。
这被记录为golang 问题 28532 https://github.com/golang/go/issues/28532.
因此我建议用这个答案来做一个。
在 go 核心语言和工具本身中的用途:
-
去:生成 https://blog.golang.org/generate可用于代码生成。
-
godoc https://blog.golang.org/godoc-documenting-go-code使用函数名称来指示它应该解释的注释
-
Examples https://blog.golang.org/examples- 记录测试的预期输出(感谢@Butuzov)
-
build https://golang.org/pkg/go/build/约束(以 ' 开头// +构建')
-
导入评论 https://golang.org/pkg/cmd/go/#hdr-Import_path_checking e.g. '包数学 // 导入“路径”'
在第三方软件包中的显着用途
-
合约 https://github.com/Parquery/gocontracts- 将前提条件指定为注释
-
趾高气昂 https://github.com/go-swagger- 使用 swagger 记录 ReST API
-
golangci https://github.com/golangci/golangci-lint#false-positives例如//nolint[:linter1,linter2,...]
他们怎样才能避免彼此冲突呢?
如果您正在开发一个确实需要将注释视为属性的工具,并且希望避免与其他类似用途发生冲突,请在您的注释前添加诸如“的命名空间”{mytool}: "
在命名空间方面有一些有意识的尝试。
go 内置的神奇注释使用“go:”前缀,如“go:generate”
(除非他们不这样做)
go-swagger 使用“swagger:”
但是,您仍然需要谨慎对待这个问题,并检查此处的列表或您可以找到的任何其他来源。
还要考虑评论是否是最好的or only https://github.com/Parquery/gocontracts/issues/22方法而不是使用函数。
比较例如(合约 https://github.com/Parquery/gocontracts):
// SomeFunc ensures:
// * !strings.HasSuffix(result, "smth")
func SomeFunc(x int) (result string) {
// ...
}
with (godbc https://godoc.org/github.com/lpabon/godbc)
func SomeFunc(x int) (result string) {
godbc.Require(strings.HasSuffix(result,"smth");
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)