什么';Go中命名标签的标准做法是什么?

什么';Go中命名标签的标准做法是什么?,go,coding-style,naming-conventions,control-flow,continue,Go,Coding Style,Naming Conventions,Control Flow,Continue,并给出了命名包、类型、函数和变量的准则。还有一个关于包名的讨论。但是,似乎没有一篇文章讨论与goto、break和continue一起使用的标签的命名约定 我相信最好的做法是完全避免使用标签,但是Go中那些控制流标签的标准约定是什么 请注意,此问题并非要求提供命名建议。我只是想知道谷歌提供了什么样的指南,或者他们是如何实际使用它的,这会很好。根据Go标准库和内部软件包的源代码,他们倾向于以通常命名变量的相同方式命名标签 因此,标签可以有大写或小写字符的任意组合,只要不使用下划线来书写任何内容 看

并给出了命名包、类型、函数和变量的准则。还有一个关于包名的讨论。但是,似乎没有一篇文章讨论与
goto
break
continue
一起使用的标签的命名约定

我相信最好的做法是完全避免使用标签,但是Go中那些控制流标签的标准约定是什么


请注意,此问题并非要求提供命名建议。我只是想知道谷歌提供了什么样的指南,或者他们是如何实际使用它的,这会很好。

根据Go标准库和内部软件包的源代码,他们倾向于以通常命名变量的相同方式命名标签

因此,标签可以有大写或小写字符的任意组合,只要不使用下划线来书写任何内容

混合帽 最后,Go中的惯例是使用
MixedCaps
MixedCaps
而不是下划线来编写多字名称

一些例子:


CamelCase
中写入所有标签的所有示例片段。在规范和实现中,
Loop
这个词通常缩写为
L


如前所述:没有关于标签名称的正式公约、指南或标准实践。任何其他答案都是主观的。是的,写标签名称的惯例只是使用
MixedCaps
MixedCaps
而不是下划线。@couch:换句话说,标签没有惯例。在Go中命名任何东西都有现有的约定。
continue LOOP
break loop
break Loop
break countloop
break parseField
break GeneratePrimes
func f3() {
L1:
L2:
L3:
    for {
        break L1 /* ERROR "invalid break label L1" */
        break L2 /* ERROR "invalid break label L2" */
        break L3
        continue L1 /* ERROR "invalid continue label L1" */
        continue L2 /* ERROR "invalid continue label L2" */
        continue L3
        goto L1
        goto L2
        goto L3
    }
}
OuterLoop:
    for i = 0; i < n; i++ {
        for j = 0; j < m; j++ {
            switch a[i][j] {
            case nil:
                state = Error
                break OuterLoop
            case item:
                state = Found
                break OuterLoop
            }
        }
    }
RowLoop:
    for y, row := range rows {
        for x, data := range row {
            if data == endOfRow {
                continue RowLoop
            }
            row[x] = data + bias(x, y)
        }
    }
goto Error
    goto L  // BAD
    v := 3
L:
if n%2 == 1 {
    goto L1
}
for n > 0 {
    f()
    n--
L1:
    f()
    n--
}