Go 函数中的函数

Go 函数中的函数,go,Go,我遇到了一些使用如下函数的代码: func main() { ... X: ... } 我不明白这是怎么回事。这是我创建的一个例子,我试着四处乱逛,看看发生了什么,但我不完全理解K是什么,它是一个闭包吗?lambda函数 package main import "fmt" func main() { for i:=0; i<10; i++ { K: for j:=0; j<10; j++{ if

我遇到了一些使用如下函数的代码:

func main() {

    ...
    X:
        ...

}
我不明白这是怎么回事。这是我创建的一个例子,我试着四处乱逛,看看发生了什么,但我不完全理解K是什么,它是一个闭包吗?lambda函数

package main

import "fmt"

func main() {
    for i:=0; i<10; i++ {
        K: for j:=0; j<10; j++{
            if i*j == 81 {
                fmt.Printf("%v,%v", i, j)
                break;
            } else {
                continue K;
            }
        }
    } 

}
我对函数式编程也很陌生,所以我试图理解这个概念。

这是一个新概念。您可以将其与goto、break或continue一起使用

发件人:

定义从未使用过的标签是非法的。与其他标识符不同,标签不受块范围限制,也不与非标签的标识符冲突。标签的作用域是声明它的函数体,不包括任何嵌套函数体

在需要以某种方式更改流的情况下,它们非常有用,例如

K: for i:=0; i<10; i++ {
    for j:=0; j<10; j++{
        if (somefunction(j)) {
            continue K; // stops this for, and continue the outer one
        } else if (otherfunction(i, j)) {
            break K; // stops the outer loop
        }
        ....
    }
}

这些不是函数,而是golang中的标记语句


带标签的语句可以用作转到、中断、继续等的目标。

这与?我在Java中从未见过这种语法,Java是我最常用的语言。Java AFIK没有goto,但可以在中断和继续时使用标签。在C语言中,同样是AFIK,不能在“断开并继续”上使用标签。所以在围棋中,两件事你都要做。谢谢你的帮助!拱门标志,很漂亮。