Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 如何写append";方法“;围棋_Go - Fatal编程技术网

Go 如何写append";方法“;围棋

Go 如何写append";方法“;围棋,go,Go,我想探索围棋的可能性。如何将“append”转换为方法?简单地说:“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") //

我想探索围棋的可能性。如何将“append”转换为方法?简单地说:“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] !!!
我知道为什么代码不检查类型兼容性,但正确的方法是什么?可能吗?
我很感谢你帮助我理解围棋是如何运作的

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

不要打架,走吧。只需写一行代码。在您花时间尝试创建复杂的泛型时,您本可以解决另外三个问题并发布产品。这就是Go的工作原理

这并不是说GO永远不会有泛型,但当我们从Russ Cox那里考虑以下内容:

例如,我最近一直在研究泛型,但我对Go用户需要泛型解决的具体问题没有一个清晰的认识。因此,我无法回答是否支持泛型方法这样的设计问题,也就是说,与接收器分开参数化的方法。如果我们有大量真实世界的用例,我们可以通过检查重要的用例来回答这样的问题


(另一方面,泛型是中最受欢迎的主题,因此并不是没有人意识到这一点。但不要反对Go。它是一种用于发布优秀软件的奇妙语言。然而,它不是泛型语言。)

因为Go代码不支持泛型,所以您无法编写既通用又类型安全的函数。这就是为什么
append
是作为内置函数实现的,而不是作为stdlib的一部分。谢谢。我得到了它。经过多年的通用语言(Python、R、JS等)编码,很难适应。但我喜欢它的大多数想法和简单。