3 回答
TA贡献1853条经验 获得超18个赞
这是特殊的语法。除了映射键检查之外,至少类型断言和通道接收具有一元素和二元素版本。在所有这些情况下,第二个元素在文档示例中是一个bool
调用ok
;对于类型断言,它表示断言是否成功,对于通道接收,它表示通信是否成功(false
如果通道关闭且为空)。
for...range
有自己的、不同的单元素和双元素版本,但也许range
更明显是特别的。
有一个内置函数列表。如果你真的想知道所有的极端情况,请查看规范——它很短,没有陷入某些标准文档的各种细节,一旦你玩过这种语言就值得花时间. (Effective Go和FAQ也属于这一类。)
TA贡献1883条经验 获得超3个赞
您给出的示例不是方法重载。
第一个示例:显示地图中是否存在键。
m := make(map[int]int)
elem, ok := m[1]
elem = m[1]
elem 将从地图中接收值“1”或“零值”,如果“foo”实际存在于地图中,则 ok 将接收一个将设置为 true 的布尔值。
官方网站:Go 不支持方法和运算符的重载?
如果不需要进行类型匹配,则方法分派会得到简化。使用其他语言的经验告诉我们,拥有多种名称相同但签名不同的方法有时很有用,但在实践中也可能会令人困惑和脆弱。仅按名称匹配并要求类型的一致性是 Go 类型系统中一个主要的简化决定。
Golang 支持可变参数函数和方法。这是您可以(或多或少)在 Golang 中进行函数和方法重载的另一种方式。
可变参数函数或方法是接受可变数量参数的函数或方法。
示例:
o1 := Overload(1, 2, 3)
o2 := Overload(153, 196883, 1729, 1634, 5, 36)
o3 := Overload(1, -2)
有关更多详细信息,您可以查看这篇文章:Golang 中的函数和方法重载。
- 3 回答
- 0 关注
- 153 浏览
添加回答
举报