Go是否支持内置类型(例如map和slice)的运算符重载?

Neo*_*ang -1 overloading built-in go

在python中,我可以通过定义来定义覆盖列表项访问和dict值访问的类型__getitem__()。我可以在Go中做类似的事情吗?

// What I mean is:
type MySlice []MyItem
// Definition of MySlice
......
func (s MySlice) getItem(i int) MyItem {
}
......
// Access is overrided with calling getItem()
item := ms[0] //calling ms.getItem(0)
// Is this doable?
Run Code Online (Sandbox Code Playgroud)

And*_*ewN 5

不,运算符重载不是Go的功能。

引用官方常见问题解答解释原因

如果方法分派也不需要进行类型匹配,则可以简化方法分派。其他语言的经验告诉我们,使用具有相同名称但签名不同的多种方法有时会很有用,但在实践中也可能会造成混淆和脆弱。在Go的类型系统中,仅按名称进行匹配并要求类型一致是一个简化的主要决定。

关于操作员重载,似乎比绝对要求更方便。同样,没有它,事情会更简单。