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 关注
- 208 浏览
添加回答
举报