为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
沧海一幻觉 2023-05-08 17:52:09
看下面的两个代码片段: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函数,为什么它们显示不同的结果?
查看完整描述

2 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

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

没有和for没有break循环条件算作终止语句,但有for循环条件不算,即使该循环条件始终为真。(规则可以扩展为将forwithtrue作为终止语句的条件,但是添加太多情况会使定义更加混乱而不是有用。)您的第二个getIntJ定义没有终止语句。


查看完整回答
反对 回复 2023-05-08
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

按照说明插入退货。


package main


import (

    "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


输出:


20

20

对于getIntJ1, for {},return永远不需要。对于getIntJ2, for condition {},return可能需要。condition编译器在什么时候可以更聪明true


for {}写比写更惯用for true {}。


查看完整回答
反对 回复 2023-05-08
  • 2 回答
  • 0 关注
  • 112 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信