2 回答

TA貢獻1811條經驗 獲得超4個贊
你引用:
x.f
表示最淺深度的字段或方法T
引文指的是深度。深度的“定義”是:
選擇器可以表示類型的
f
字段或方法,也可以指的嵌套嵌入字段的字段或方法。遍歷到達的嵌入字段的數量稱為它的深度。中聲明的字段或方法的深度為零。在嵌入字段in中聲明的字段或方法的深度是in的深度加一。f
T
f
T
f
T
f
T
f
A
T
f
A
關鍵是嵌入。您的結構不嵌入單一類型。所以根據定義, your的深度T.M
為零。
您的t
變量是類型*T
(即表達式的類型&T{}
,它采用結構復合文字的地址:它生成一個指向用文字值初始化的唯一變量的指針)。
并引用規范:方法值:
與選擇器一樣,使用指針對具有值接收器的非接口方法的引用將自動取消對該指針的引用:
pt.Mv
相當于(*pt).Mv
。
t.M
是對非接口方法 的引用T.M
,并且由于t
是指針,因此它將自動取消引用:(*t).M()
。
現在讓我們看一個例子,其中“最淺深度”確實很重要。
type T struct{}
func (t T) M() { fmt.Println("T.M()") }
type T2 struct {
? ? T // Embed T
}
func (t T2) M() { fmt.Println("T2.M()") }
func main() {
? ? var t T = T{}
? ? var t2 T2 = T2{T: t}
? ? t2.M()
}
在main()我們調用t2.M(). 由于T2嵌入T,這可以指T2.T.Mand T2.M。但由于 的 深度T2.T.M是1, 的 深度T2.M是0,T2.M處于 中最淺的深度T2,因此t2.M將表示T2.M且 not ,因此上面的示例打?。ㄔ贕o PlaygroundT2.T.M上嘗試):
T2.M()
- 2 回答
- 0 關注
- 173 瀏覽
添加回答
舉報