【问题标题】:Golang type embedding implementGolang 类型嵌入工具
【发布时间】:2021-08-17 15:33:34
【问题描述】:

我有一个嵌入类型 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()
}

【问题讨论】:

    标签: go methods struct embedding


    【解决方案1】:

    是的,*T 的方法集包含带有接收器 B*B 的方法。

    Spec: Struct types:

    给定结构类型Sdefined type T,提升的方法包含在结构的方法集中,如下所示:

    • 如果S 包含嵌入字段T,则S*Smethod sets 都包含带有接收器T 的提升方法。 *S 的方法集还包括带有接收者*T 的提升方法。
    • 如果S 包含嵌入字段*T,则S*S 的方法集都包含带有接收者T*T 的提升方法。

    【讨论】:

      猜你喜欢
      • 2017-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-17
      • 2021-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多