Golang Go语言结构体中匿名字段暴露方法的优先级
发布时间:2020-12-16 18:47:50 所属栏目:大数据 来源:网络整理
导读:Golang Go语言结构体中匿名字段暴露方法的优先级 Go语言的结构体中可以包含匿名的字段,比如: struct { T1 // 字段名自动为 T1 *T2 // 字段名自动为 T2 P.T3 // 字段名自动为 T3 *P.T4 // 字段名自动为 T4 x,yint // 非匿名字段 x , y} 如果构体 S,包含一
Golang Go语言结构体中匿名字段暴露方法的优先级Go语言的结构体中可以包含匿名的字段,比如: struct {
T1 // 字段名自动为 T1
*T2 // 字段名自动为 T2
P.T3 // 字段名自动为 T3
*P.T4 // 字段名自动为 T4
x,yint // 非匿名字段 x , y
} 如果构体 S,包含一个匿名字段 T,那么这个结构体 S 就有了 T的方法。
如果包含的匿名字段为 *T,那么这个结构体 S 就有了 *T 的方法。 比如 type gzipResponseWriterstruct {
io.Writer
} 因为 io.Writer里有 Write方法,所以 gzipResponseWriter 也有了 Write方法
var g gzipResponseWriter
g.Write(数据)
此处的 g.Write 就相当于 g.Writer.Write(数据)。 那么如果两个匿名字段都有同一个方法的时候,会怎么样呢? type gzipResponseWriterstruct {
io.Writer
http.ResponseWriter
} io.Writer这个接口已经有 Write方法了,http.ResponseWriter 同样有 Write方法。那么对 g.Write写的时候,到底调用哪个呢?是 g.Writer.Write 还是 g.ResponseWriter.Write呢?你不知道程序也不知道,如果编译就出现“Write模糊不清”的错误。
怎么解决这个问题?
|