翻译进度
2
分块数量
2
参与人数
Type identity
这是一篇协同翻译的文章,你可以点击『我来翻译』按钮来参与翻译。
两种类型要么是相同的,要么是不同的。
一个定义的类型总是与其他任何类型不同。否则,如果两个类型的底层类型字面量在结构上等价,则它们是相同的;也就是说,它们具有相同的字面结构,并且对应组件具有相同的类型。详细来说:
- 如果两个数组类型具有相同的元素类型和相同的数组长度,则它们是相同的。
- 如果两个切片类型具有相同的元素类型,则它们是相同的。
- 如果两个结构体类型具有相同的字段顺序,并且对应字段具有相同的名称、相同的类型和标签,则它们是相同的。不同包中的非导出字段名称始终是不同的。
- 如果两个指针类型具有相同的基本类型,则它们是相同的。
- 如果两个函数类型具有相同数量的参数和结果值,对应的参数和结果类型是相同的,并且两个函数都是可变参数或者都不是,则它们是相同的。参数和结果名称不需要匹配。
- 如果两个接口类型具有相同的方法集,方法名称相同且函数类型完全一致,则它们是相同的。来自不同包的非导出方法名称总是不同的。方法的顺序无关紧要。
- 如果两个 map 类型具有相同的键和元素类型,则它们是相同的。
- 如果两个 channel 类型具有相同的元素类型和指向,则它们是相同的。
Given the declarations
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
these types are identical:
A0, A1, and []string
A2 and struct{ a, b int }
A3 and int
A4, func(int, float64) *[]string, and A5
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
and B1
are different because they are new types created by distinct type definitions; func(int, float64) *B0
and func(x int, y float64) *[]string
are different because B0
is different from []string
.
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。