如何在go中添加“方法”

时间:2017-08-21 20:47:16

标签: go

我想探索围棋的可能性。你会如何“追加”方法?简单地说:“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如何运作。

1 个答案:

答案 0 :(得分:2)

正确的方法是将append()作为内置函数调用。这是一个内置功能并不是偶然的;你不能在Go中写append本身,任何近似它的东西都是不安全的(并且过于复杂)。

不要打Go。只需编写代码行。在您花费时间尝试创建棘手的泛型时,您可以解决另外三个问题并运送产品。这就是Go的工作方式。

这并不是说Go永远不会有仿制药,但随着我们向Go 2迈进,请考虑以下来自Russ Cox:

  

例如,我最近一直在研究泛型,但我并没有清楚地了解Go用户需要泛型解决的详细具体问题。因此,我无法回答设计问题,例如是否支持泛型方法,即与接收器分开参数化的方法。如果我们有大量的实际用例,我们可以通过检查重要的用例来回答这样的问题。

(另一方面,Generics是ExperienceReports中回应率最高的话题,所以并不是没有人意识到这个问题。但是不要去Go。这是一个出色的语言但是,它不是通用语言。)