【问题标题】:Provide function return from an if statement issues从 if 语句问题提供函数返回
【发布时间】:2013-12-04 15:14:02
【问题描述】:

我在从 golang 的 if 语句中返回函数的预期返回语句时遇到问题。

我提供了以下代码:

package main

import (
    "fmt"
)

func random() string {
    var x = "return"

    if x == "return" {
        return x
    }
}
func main() {
    fmt.Println(random())
}

main函数不应该打印出随机函数返回的字符串值吗?我得到的只是

go.go:13: missing return at end of function

有人知道如何做到这一点吗?

【问题讨论】:

    标签: if-statement go return


    【解决方案1】:

    如果函数返回一个值,你必须在最后包含一个return,即使它从未使用过:

    http://play.golang.org/p/XFsPL2G15R

    func random() string {
        var x = "return"
    
        if x == "return" {
            return x
        }
        return ""
    }
    func main() {
        fmt.Println(random())
    }
    

    【讨论】:

    • 通常你会在最后加上panic("should never happen")。编译器也允许这样做,并兼作健全性检查。
    • 这是 Go 编译器最愚蠢的行为之一,而且未使用的变量和导入是错误而不是警告。你需要做编译器想让你做的事情,而不是你需要做的事情,你知道的!
    【解决方案2】:

    在 Go 1.1 中,你不需要一直在函数末尾添加 return,但你需要一个 终止语句,这段代码应该可以工作: http://play.golang.org/p/fNiijqNHbt

    func random() string {
        var x = "return"
    
        if x == "return" {
            return x
        } else {
            return "else"
        }
    }
    func main() {
        fmt.Println(random())
    }
    

    有关详细信息,请参阅:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-05
      • 2010-09-26
      • 2017-07-27
      • 2015-08-05
      • 2018-07-02
      相关资源
      最近更新 更多