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

时间:2018-11-26 18:56:21

标签: go

类似于this question关于标签,我注意到注释的用途不仅仅限于纯注释。

示例:

还有其他我想念的吗?

在某个地方有明确的清单吗?

gocontractsgo-swagger之类的某些第三方程序包也使用它们。他们如何避免彼此冲突?

2 个答案:

答案 0 :(得分:1)

Examples-允许测试example输出的功能。

从上面的链接复制/粘贴。

package stringutil_test

import (
    "fmt"

    "github.com/golang/example/stringutil"
)

func ExampleReverse() {
    fmt.Println(stringutil.Reverse("hello"))
    // Output: olleh
}

答案 1 :(得分:0)

comments are directives in go所述,不仅仅是评论。

在编写最终列表时没有。 记录为golang issue 28532

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

使用go核心语言和工具本身

  • go:generate可用于代码生成。
  • godoc使用函数名称来表示应解释的注释
  • Examples-记录测试的预期输出(感谢@Butuzov)
  • build约束(从' // + build '开始)
  • Import comments,例如'包数学//导入“路径” '

在第三方程序包中的显着用途

如何避免彼此冲突?

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

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

go-swagger使用“ swagger:”

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

还要考虑注释是否是最好的or only方法,而不是使用函数。 比较例如(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");
}