猿问

“for true {}”发生“函数末尾缺少返回值”

看下面的两个代码片段:

code1:


func getIntJ1() (j int32) {

    for {

        j = 20

        return

    }

}

代码2:


func getIntJ2() (j int32) {

    for true {

        j = 20

        return

    }

}

游乐场:https://play.golang.org/p/ZnwjZDksZhu


我认为他们应该在控制台中打印相同的值20,但他们做不到我想要的。

可以在控制台code1打印值,但出现编译错误:。 20code2missing return at end of function


它们都有一个infinite loopin函数,为什么它们显示不同的结果?


沧海一幻觉
浏览 113回答 2
2回答

富国沪深

为了防止函数在不返回其返回值的情况下运行结束,Go 有一个终止语句的概念。终止语句是某些类型的语句,可以很容易地表明执行不会继续超过该语句。带有结果参数的函数必须以终止语句结束。没有和for没有break循环条件算作终止语句,但有for循环条件不算,即使该循环条件始终为真。(规则可以扩展为将forwithtrue作为终止语句的条件,但是添加太多情况会使定义更加混乱而不是有用。)您的第二个getIntJ定义没有终止语句。

慕侠2389804

按照说明插入退货。package mainimport (    "fmt")func main() {    fmt.Println(getIntJ1())    fmt.Println(getIntJ2())}func getIntJ1() (j int32) {    for {        j = 20        if j == 21 {            continue        }        return    }}func getIntJ2() (j int32) {    for true {        j = 20        if j == 21 {            continue        }        return    }    return}游乐场:https://play.golang.org/p/QbYQ6NkOMpQ输出:2020对于getIntJ1, for {},return永远不需要。对于getIntJ2, for condition {},return可能需要。condition编译器在什么时候可以更聪明truefor {}写比写更惯用for true {}。
随时随地看视频慕课网APP

相关分类

Go
我要回答