翻译进度
2
分块数量
2
参与人数

Type identity

这是一篇协同翻译的文章,你可以点击『我来翻译』按钮来参与翻译。


两种类型要么是相同的,要么是不同的

一个定义的类型总是与其他任何类型不同。否则,如果两个类型的底层类型字面量在结构上等价,则它们是相同的;也就是说,它们具有相同的字面结构,并且对应组件具有相同的类型。详细来说:

  • 如果两个数组类型具有相同的元素类型和相同的数组长度,则它们是相同的。
  • 如果两个切片类型具有相同的元素类型,则它们是相同的。
  • 如果两个结构体类型具有相同的字段顺序,并且对应字段具有相同的名称、相同的类型和标签,则它们是相同的。不同包中的非导出字段名称始终是不同的。
  • 如果两个指针类型具有相同的基本类型,则它们是相同的。
  • 如果两个函数类型具有相同数量的参数和结果值,对应的参数和结果类型是相同的,并且两个函数都是可变参数或者都不是,则它们是相同的。参数和结果名称不需要匹配。
  • 如果两个接口类型具有相同的方法集,方法名称相同且函数类型完全一致,则它们是相同的。来自不同包的非导出方法名称总是不同的。方法的顺序无关紧要。
  • 如果两个 map 类型具有相同的键和元素类型,则它们是相同的。
  • 如果两个 channel 类型具有相同的元素类型和指向,则它们是相同的。
lisgroup 翻译于 8个月前

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 definitionsfunc(int, float64) *B0 and func(x int, y float64) *[]string are different because B0 is different from []string.

本文章首发在 LearnKu.com 网站上。

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

贡献者:2
讨论数量: 0
发起讨论 只看当前版本


暂无话题~