Golang 多重返回重载是地图类型独有的吗?

这些都有效:


m := make(map[int]int)

elem, ok := m[1]

elem = m[1]

然而,这是不允许的:


func overload() (int, int) {

    return 1, 1

}


func overload() int {

    return 1

}


func main() {

    x := overload()

    x, y := overload()

}

另外,是否有不能概括的内置语法列表?我一直对什么是特殊语法(即map[string]int)make([]int, 10)以及什么是语言的一部分感到困惑。


Qyouu
浏览 154回答 3
3回答

慕容森

这是特殊的语法。除了映射键检查之外,至少类型断言和通道接收具有一元素和二元素版本。在所有这些情况下,第二个元素在文档示例中是一个bool调用ok;对于类型断言,它表示断言是否成功,对于通道接收,它表示通信是否成功(false如果通道关闭且为空)。for...range有自己的、不同的单元素和双元素版本,但也许range更明显是特别的。有一个内置函数列表。如果你真的想知道所有的极端情况,请查看规范——它很短,没有陷入某些标准文档的各种细节,一旦你玩过这种语言就值得花时间. (Effective Go和FAQ也属于这一类。)

白板的微信

您给出的示例不是方法重载。第一个示例:显示地图中是否存在键。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 中的函数和方法重载。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go