gpt4 book ai didi

go - 在父类(super class)的子类上找不到接口(interface)方法

转载 作者:数据小太阳 更新时间:2023-10-29 03:39:13 26 4
gpt4 key购买 nike

<分区>

鉴于此代码...

type BaseItf1 interface {
getName() string
clone() *BaseStruct
}

type BaseStruct struct {
BaseItf1
}

func (bs *BaseStruct) cloneAndGetName() string {
sc := bs.clone()
return sc.getName()
}

type SubClass struct {
BaseStruct
}

func (sc *SubClass) getName() string {
return "A"
}

func (sc *SubClass) clone() *SubClass {
return &SubClass{}
}

func main() {
sc := &SubClass{}
fmt.Printf("-> %s\n", sc.clone().getName())
fmt.Printf("-> %s\n", sc.cloneAndGetName())
}

我不太明白为什么会出现此错误:

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0xffffffff addr=0x0 pc=0x2004a]

main 中对 clone 的调用自然而然地完美运行。

但是,在cloneAndGetName 中,无法调用clone 方法。 bs 被类型化为指向 BaseStruct 的指针,它具有带有 clone 方法的 BaseItf 接口(interface)。看起来 main 中调用 cloneAndGetName 的具体 sc 实例知道如何定位 clone 方法。

我错过了什么?有没有更好的方法来解决这个问题?在我的实际代码中,我需要一种方法来从一些共享代码创建对象的新实例。

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