事实证明,这是我对Go如何处理类型的一种误解,可以通过阅读规范的相关部分来解决:
http://golang.org/ref/spec#Type_identity
我不知道的相关区别是 和 类型的区别。
类型是具有名称的类型,例如int,int64,float,string,bool。此外,您使用“ type”创建的任何类型都是命名类型。
类型是诸如[] string,map [string] string,[4] int之类的类型。它们没有名称,只是对应于其结构的描述。
如果比较两个命名类型,则名称必须匹配,以便它们可以互换。如果您比较命名类型和未命名类型,则 ,就可以了!
例如,给定以下类型:
type MyInt int
type MyMap map[int]int
type MySlice []int
type MyFunc func(int)
以下是无效的:
var i int = 2
var i2 MyInt = 4
i = i2 //both named (int and MyInt) and names don't match, so invalid
以下很好:
is := make([]int)
m := make(map[int]int)
f := func(i int){}
//OK: comparing named and unnamed type, and underlying representation
//is the same:
func doSlice(input MySlice){...}
doSlice(is)
func doMap(input MyMap){...}
doMap(m)
func doFunc(input MyFunc){...}
doFunc(f)
我有点不知所措,我不早知道,所以我希望可以为其他人澄清一下百灵鸟!而且意味着比我最初想像的要少得多的铸造:)