"for true {}"发生"在函数结束时缺少返回"

Shu*_*lan -4 go

看下面两个代码片段:
code1:

func getIntJ1() (j int32) {
    for {
        j = 20
        return
    }
}
Run Code Online (Sandbox Code Playgroud)

码2:

func getIntJ2() (j int32) {
    for true {
        j = 20
        return
    }
}
Run Code Online (Sandbox Code Playgroud)

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

我认为他们应该20在控制台中打印相同的值,但他们不能做我想要的.
code1可以打印值20在控制台中,但code2会出现编译错误:missing return at end of function.

所有这些都有infinite loop功能,为什么它们显示不同的结果?

use*_*ica 5

为了防止函数在不返回返回值的情况下运行,Go有一个终止语句的概念.终止语句是某些类型的语句,可以很容易地显示执行不会继续超过该语句.具有结果参数的函数必须以终止语句结束.

一个for没有break,没有循环条件算作终止语句,而是一个for具有循环条件不计,即使循环条件始终是真实的.(规则可以扩展为for使用true条件作为终止语句来计数,但添加太多的情况会使定义更加混乱而不是有用.)您的第二个getIntJ定义没有终止语句.