登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-04-12 18:21:37 326浏览 收藏

学习知识要善于思考,思考,再思考!今天golang学习网小编就给大家带来《“for true {}”发生“函数末尾缺少返回”》,以下内容主要包含等知识点,如果你正在学习或准备学习Golang,就都不要错过本文啦~让我们一起来看看吧,能帮助到你就更好了!

问题内容

看下面两个代码片段:

代码1:

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 可以在控制台打印值 20,但是 code2 出现编译错误:missing return at end of function

它们的函数中都有一个in无限循环,为什么它们显示的结果不同?


解决方案


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

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

按照指示,插入退货单。

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 对于 {},永远不需要 return。对于 getintj2(对于条件 {}),可能需要 return。当 conditiontrue 时,编译器可能会更智能

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

到这里,我们也就讲完了《“for true {}”发生“函数末尾缺少返回”》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>