为什么可以键入别名函数并在不进行强制转换的情况下使用它们?

为什么可以键入别名函数并在不进行强制转换的情况下使用它们?,第1张

为什么可以键入别名函数并在不进行强制转换的情况下使用它们?

事实证明,这是我对Go如何处理类型的一种误解,可以通过阅读规范的相关部分来解决:

http://golang.org/ref/spec#Type_identity

我不知道的相关区别是 命名未命名 类型的区别。

命名 类型是具有名称的类型,例如int,int64,float,string,bool。此外,您使用“ type”创建的任何类型都是命名类型。

未命名的 类型是诸如[] string,map [string] string,[4] int之类的类型。它们没有名称,只是对应于其结构的描述。

如果比较两个命名类型,则名称必须匹配,以便它们可以互换。如果您比较命名类型和未命名类型,则 只要基础表示形式匹配 ,就可以了!

例如,给定以下类型:

type MyInt inttype MyMap map[int]inttype MySlice []inttype MyFunc func(int)

以下是无效的:

var i int = 2var i2 MyInt = 4i = 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)

我有点不知所措,我不早知道,所以我希望可以为其他人澄清一下百灵鸟!而且意味着比我最初想像的要少得多的铸造:)



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4930202.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-13
下一篇 2022-11-13

发表评论

登录后才能评论

评论列表(0条)

保存