Go 为什么在调用嵌入式字段时类型别名和类型的行为不同';围棋的方法是什么?

Go 为什么在调用嵌入式字段时类型别名和类型的行为不同';围棋的方法是什么?,go,Go,go版本go1.11.2 linux/amd64 prog.go:21:12:无法在v_T3.T1的参数中将v_T3(类型T3)用作类型T1。您好 第21行:我期待呼叫v_T3.Hello但实际呼叫v_T3.T1.Hello 第23排:没关系 type T4 = T2 这为现有类型T2提供了一个附加名称T4。它没有引入新的类型。换句话说,T2和T4总是可互换的。这应该可以解释为什么v_T4.Hello(v_T4)调用有效。以下所有调用在类型上都是同义的(但忽略v_T2和v_T4是不同的值):

go版本go1.11.2 linux/amd64

prog.go:21:12:无法在v_T3.T1的参数中将v_T3(类型T3)用作类型T1。您好

第21行:我期待呼叫
v_T3.Hello
但实际呼叫
v_T3.T1.Hello

第23排:没关系

type T4 = T2
这为现有类型T2提供了一个附加名称T4。它没有引入新的类型。换句话说,T2和T4总是可互换的。这应该可以解释为什么
v_T4.Hello(v_T4)
调用有效。以下所有调用在类型上都是同义的(但忽略v_T2和v_T4是不同的值):



这定义了一个不同于所有其他类型的新类型T3。根据类型规则。但因为它们具有相同的底层类型,T3和T2的字段是相同的,包括嵌入的T1。这是因为T3和T2是不同的类型。和
type T4 = T2
var v_T2 T2
var v_T4 T4

v_T2.Hello(v_T2)
v_T2.Hello(v_T4)
v_T4.Hello(v_T2)
v_T4.Hello(v_T4)
type T3 T2