Golang类型嵌入工具
我有一个嵌入类型 B 的类型 T,并且 *B 实现了 I。 *T 可以分配给类型 I 的变量,但不是在 T 的情况下,这是否意味着 (*T) 的方法集包含值和B的指针接收器?
package main
import (
"fmt"
)
type I interface {
Foo()
}
type B struct {}
type T struct {
B
}
func (a *B) Foo() {
fmt.Println("Bar")
}
func main() {
t := T{B{}}
// var i I = t -> error
var i I = &t
i.Foo()
}
回答
是的,方法集*T包含带有接收器B和的方法*B。
规格:结构类型:
给定一个 struct type
S和一个定义的 typeT,提升的方法包含在结构的方法集中,如下所示:
- 如果
S包含嵌入字段T,该方法集的S和*S两者都包括推进与接收器的方法T。方法集*S还包括带有接收器的提升方法*T。- 如果
S包含嵌入字段*T,则S和的方法集*S都包含带有接收者T或的提升方法*T。