gpt4 book ai didi

go - 如何在 Go 中找到接口(interface)的根实现?

转载 作者:IT王子 更新时间:2023-10-29 02:34:36 26 4
gpt4 key购买 nike

我有一个接口(interface) RootInterface 嵌入到结构 OneConcrete 中。然后,该接口(interface)的具体实现再次作为 RootInterface 嵌入到另一个结构 TwoConcrete 中。

如何确定RootInterface的实际实现是OneConcrete?以下代码有望显示我正在努力实现的目标:

http://play.golang.org/p/YrwDRwQzDc

package main

import "fmt"

type RootInterface interface {
GetInt() int
}

type OneConcrete struct {
}

func (oc OneConcrete) GetInt() int {
return 1
}

type TwoConcrete struct {
RootInterface
}

func main() {
one := OneConcrete{}
fmt.Println("One", one.GetInt())

two := RootInterface(TwoConcrete{RootInterface: one})

_, ok := two.(TwoConcrete)
fmt.Println(ok) // prints true

// How can I get the equivalent of ok == true,
// i.e. find out that OneConcrete is the acutal
// RootInterface implementation?
_, ok = two.(OneConcrete)
fmt.Println(ok) // prints false
}

请注意,我想要对 RootInterface 可以任意深入地嵌入到结构层次结构中的一般情况的答案。

最佳答案

OneConcrete 不嵌入界面。它实现了该接口(interface)。嵌入一​​种类型意味着 struct 将获得一个与给定类型同名的附加字段,并且该类型的所有方法都将成为 struct 的方法。因此,要获得 OneConcrete,您应该执行 two.(TwoConcrete).RootInterface.(OneConcrete)

关于go - 如何在 Go 中找到接口(interface)的根实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23377553/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com