新手问题:为什么 Map 和 type assertion 可以既返回一个值,又可以返回两个值

2016-03-27 15:16:45 +08:00
 jyjmrlk

http://stackoverflow.com/questions/36244725/golang-why-map-and-type-assertion-can-return-1-or-2-value

map 可以:

value, present := m["key"]

value := m["key"]

type assertion 可以

var i interface{} = "hello"

s := i.(string)
fmt.Println(s)

s, ok := i.(string)
fmt.Println(s, ok)

我自己创建一个 func

func hello() (string, error) {
    return "world", nil
}
when invoke the func:

v, ok := hello() // valid
v := hello() // invalid

刚通过 golang tour 看了一天 golang 的语法,这里不太理解,想问下 map 和 type assertion 是怎么实现这种优雅的方式的。

915 次点击
所在节点    Go 编程语言
3 条回复
tidezyc
2016-03-27 16:23:36 +08:00
语言就是这么设计的,你可以认为是语法糖,具体编译器会判断返回一个还是两个,而且只针对特定类型,比如 map , chan , range 和断言
datou552211
2016-03-27 16:57:55 +08:00
返回一个值的时候,没有会 panic
tidezyc
2016-03-27 17:17:51 +08:00
@datou552211 断言会 panic , map 不会

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/266642

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX