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

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

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

Go
蛊毒传说 2021-12-27 17:48:36
要定义地图,我们可以做这样的事情: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() // validv := hello() // invalidPS:我知道类似的东西是如何template.Must工作的,但它似乎不同。我真的很想知道 Map 和类型断言是如何发挥魔力的,所以我可以将它应用到函数中。提前致谢。(我清楚吗?我英语不好抱歉)。
查看完整描述

1 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

函数类型表示具有相同参数和结果类型的所有函数的集合。


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 main


import "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)

}


查看完整回答
反对 回复 2021-12-27
  • 1 回答
  • 0 关注
  • 129 浏览
慕课专栏
更多

添加回答

举报

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