提问人:Emanolo78 提问时间:7/8/2023 最后编辑:Emanolo78 更新时间:7/8/2023 访问量:49
Golang:调用嵌入类型的方法
Golang: calling methods of embedded types
问:
我正在使用 Golang 1.20 编译器,并且有一个与类型嵌入相关的奇怪行为,我不明白。
在一个名为 graphutil 的第一个包中,我创建了一个 Graph 类型结构,其中包含多个方法(例如 Graph.AddNode()):
软件包 “graphutil”:
type Graph struct {}
func (self *Graph) AddNode() {}
在另一个名为 neuronutil 的包中,我创建了一个图形的子结构,称为 NeuralNetwork:
软件包 “neuronutil”:
type NeuralNetwork struct {
*graphutil.Graph
}
从理论上讲,我应该能够为神经网络定义一个可以调用 Graph 方法的方法,如下所示:
func (self NeuralNetwork) AddNeuron() {
self.AddNode()
}
然而,编译器拒绝了这一点,它告诉我 NeuralNetwork 类型没有“AddNode”方法,尽管 NeuralNetwork 应该从 Graph 继承“AddNode”方法。当然,“neuronutil”包导入的是“graphutil”包。
奇怪的方面是:如果我创建一个主程序,它导入了“graphutil”和“neuronutil”库,我可以创建一个神经网络对象并从这个对象调用“AddNode”方法。下面的代码有效。
func main() {
testnode := graphutil.NewNode(0)
testneuralnetwork := neuronutil.NewNeuralNetwork("Test Neural Network")
testneuralnetwork.AddNode(testnode)
}
有谁明白为什么调用 Graph 结构的“AddNode”方法在 main 中有效,但在 neuronutil 库中不起作用?
错误消息为:self。AddNode undefined(类型 NeuralNetwork 没有字段或方法 AddNode)compilerMissingFieldOrMethod)
Graph.AddNode() 方法确实存在。
答: 暂无答案
评论