一尘不染

Go中语义注释的用途是什么?

go

通过与这个有关标签的问题进行类比,我注意到,除了纯注释之外,注释还有多种用途。

例子:

还有其他我想念的吗?

那里有确定的清单吗?

gocontractsgo-
swagger
等一些第三方软件包也可以使用它们。他们如何避免彼此冲突?


阅读 242

收藏
2020-07-02

共1个答案

一尘不染

如前所述,注释不仅是注释,而且是指令

撰写本文时没有确定的清单。记录为golang问题28532

因此,我建议使用此答案来做一个。

用于go核心语言和工具本身:

  • go:generate可用于代码生成。
  • godoc使用函数名称表示应解释的注释
  • 示例 -记录测试的预期输出(感谢@Butuzov)
  • 构建约束(以’ // + build ‘ 开头)
  • 导入注释,例如’ package math //导入“路径”

第三方软件包中的显着用途

  • gocontracts-指定前提条件作为注释
  • go- swagger-使用swagger记录ReST API
  • golangci,例如// nolint [:linter1,linter2,…]

他们如何避免彼此冲突?

如果您要开发的工具确实需要将注释视为属性,并希望避免与其他类似用途发生冲突,请在注释之前添加一个名称空间,例如“ {mytool} :“

有一些有意识的命名空间尝试。内置到go中的魔术注释使用“ go:”作为“ go:generate”的前缀(除非没有)

go-swagger使用“ swagger:”

但是,您仍然需要谨慎处理此问题,并检查此处的列表或您可以找到的任何其他来源。

还应考虑使用注释是最佳方法还是唯一方法,而不是使用函数。比较例如(gocontracts):

// SomeFunc ensures:
//  * !strings.HasSuffix(result, "smth")
func SomeFunc(x int) (result string) {
    // ...
}

与(godbc

func SomeFunc(x int) (result string) {
    godbc.Require(strings.HasSuffix(result,"smth");
}
2020-07-02