为什么映射和类型断言可以返回 1 或 2 个值?

要定义地图,我们可以做这样的事情:


value, present := m["key"]


或者:


value := m["key"]


使用类型断言,我们可以:


var i interface{} = "hello"


s := i.(string)

fmt.Println(s)


s, ok := i.(string)

fmt.Println(s, ok)

但我找不到定义可以返回 1 个值或 2 个值的 func 的方法。


例如:


func hello() (string, error) {

    return "world", nil

}

当我调用这个函数时,我得到:


v, ok := hello() // valid

v := hello() // invalid

PS:我知道类似的东西是如何template.Must工作的,但它似乎不同。我真的很想知道 Map 和类型断言是如何发挥魔力的,所以我可以将它应用到函数中。


提前致谢。(我清楚吗?我英语不好抱歉)。


蛊毒传说
浏览 130回答 1
1回答

烙印99

函数类型表示具有相同参数和结果类型的所有函数的集合。FunctionType   = "func" Signature .Signature      = Parameters [ Result ] .Result         = Parameters | Type .Parameters     = "(" [ ParameterList [ "," ] ] ")" .ParameterList  = ParameterDecl { "," ParameterDecl } .ParameterDecl  = [ IdentifierList ] [ "..." ] Type .空白标识符空白标识符由下划线字符 _ 表示。作业空白标识符提供了一种忽略赋值中右侧值的方法:x, _ = f()  // evaluate f() but ignore second result value映射、类型断言和for带range子句的语句是 Go 编程语言的特殊功能。普通函数类型不能有可变数量的返回值。您可以忽略带有下划线 (_)、空白标识符的返回值,或者您可以使用包装函数。例如,package mainimport "fmt"func two() (int, bool) {    return 42, true}func one() int {    r, _ := two()    return r}func main() {    r, ok := two()    r, _ = two()    r = one()    fmt.Println(r, ok)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go