文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
类型标识
两个类型可能相同也可能不同。
定义的类型都是不同类型。如果两个类型的底层类型在结构上是相同的,那它们也是相等的。总的来说:
2 个数组的长度和元素类型相同,那么它们就是相同类型。
如果两个切片的元素类型相同那么它们就是相同类型。
如果两个结构体字段顺序相同,并且字段名称、字段类型和 tag 都相同那么它们就是相等的。非导出字段的字段名在不同的包中总是不同的。
如果两个指针的基础类型相同那么他们具有相同类型。
如果两个函数具有相同的参数和返回值列表,并且他们的类型相同那么他们就是相同的,参数的名称不一定要相同。
如果两个接口的方法集完全相同(方法的顺序)。
如果两个 map 类型的键类型和值类型相同那它们就是相等的。
如果两个 channel 类型包含的对象类型和 channel 的方向都是相同的那它们就是相同的。
给出下列声明:
type (
A0 = []string
A1 = A0
A2 = struct{ a, b int }
A3 = int
A4 = func(A3, float64) *A0
A5 = func(x int, _ float64) *[]string
)
type (
B0 A0
B1 []string
B2 struct{ a, b int }
B3 struct{ a, c int }
B4 func(int, float64) *B0
B5 func(x int, y float64) *A1
)
type C0 = B0
这些类型是相等的:
A0, A1, and []string
A2 and struct{ a, b int }
A3 and int
A4, func(int, float64) *[]string, and A5
B0, B0, and C0
[]int and []int
struct{ a, b *T5 } and struct{ a, b *T5 }
func(x int, y float64) *[]string, func(int, float64) (result *[]string), and A5
B0 和 B1 不是一种类型因为它们是通过类型定义方式分别定义的; func(int, float64) *B0
和 func(x int, y float64) *[]string
是不同的,因为 B0 和 []string 不是相同类型。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论