我想探索围棋的可能性。你会如何“追加”方法?简单地说:“st.app(t)== append(st,t)” 这就是我得到的:
type T interface{}
type ST []interface{}
func (st []T) app (t T) []T {
return(append(st, t))
}
但此代码不检查类型兼容性:
append([]int{1,2},"a") // correctly gives error
ST{1,2}.app("a") // dumbly gives [1 2 a] !!!
我知道为什么代码不检查类型兼容性但是正确的方法是什么?可能吗? 感谢您的帮助,了解Go如何运作。
答案 0 :(得分:2)
正确的方法是将append()
作为内置函数调用。这是一个内置功能并不是偶然的;你不能在Go中写append
本身,任何近似它的东西都是不安全的(并且过于复杂)。
不要打Go。只需编写代码行。在您花费时间尝试创建棘手的泛型时,您可以解决另外三个问题并运送产品。这就是Go的工作方式。
这并不是说Go永远不会有仿制药,但随着我们向Go 2迈进,请考虑以下来自Russ Cox:
例如,我最近一直在研究泛型,但我并没有清楚地了解Go用户需要泛型解决的详细具体问题。因此,我无法回答设计问题,例如是否支持泛型方法,即与接收器分开参数化的方法。如果我们有大量的实际用例,我们可以通过检查重要的用例来回答这样的问题。
(另一方面,Generics是ExperienceReports中回应率最高的话题,所以并不是没有人意识到这个问题。但是不要去Go。这是一个出色的语言但是,它不是通用语言。)