2 回答

TA貢獻1828條經驗 獲得超3個贊
您沒有嵌入接口,而是將它們作為結構中的字段。
嵌入看起來像:
type MyReader struct {
io.Reader
}
如果要手動委托給接口,需要使用相同的方法名
func (m MyReader) Read(b []byte) (n int, err error) {
return m.r.Read(b)
}

TA貢獻1785條經驗 獲得超4個贊
您的語法錯誤,因此實際上并未嵌入接口/類型。
type MyWriter struct {
w io.Writer
}
應該
type MyWriter struct {
io.Writer
}
根據我的理解,適當的嵌入不會讓您有理由定義類似的方法;
func (m MyWriter) Write(b []byte) (n int, err error) {
m.w.Write(b)
return
}
因為身體就是m.Write(b)這樣,只是沒有意義。如果你嵌入一個類型,嵌入類型將能夠直接從嵌入類型調用方法(它是最接近繼承的東西,對于普通讀者來說看起來是一樣的)。如果嵌入類型中的方法或屬性名稱或嵌入類型的嵌入類型之間存在沖突,我不記得解析規則,但一個好的經驗法則是避免嵌入類型會導致命名沖突,因為行為不會明顯的。
編輯:如何覆蓋基礎類型中的方法并從內部調用“base”(我引用,因為該詞選擇可能會冒犯某些地鼠)方法的示例;
func (m MyWriter) Write(b []byte) (n int, err error) {
b = EncodeBFromMethodThatsInScopeHere(b)
return m.Writer.Write(b)
}
基本上,如果你想顯式地使用嵌入類型方法,你可以將它作為使用嵌入類型類型的類型的屬性來引用,就像它是一個屬性名稱一樣。
- 2 回答
- 0 關注
- 237 瀏覽
添加回答
舉報