1 回答
TA贡献1875条经验 获得超3个赞
永远记住,Go 不支持inheritance. 它支持composition.
你可以call继承它,只要它能帮助你在其他 OOP 语言和 Go 之间进行逻辑映射。经验法则,只要某些东西不像它在OOP世界上的运作方式那样运作,就从构图的角度来思考。
is a但是当涉及到编写实际代码时,请始终记住组合中没有任何关系,并且它始终是has a,即使看起来并非如此,因为事实上您实际上可以访问composed/embedded(still, not inherited)的成员变量和方法)结构。override如果您使用新结构声明相同的方法,您甚至可以使用该方法。这是另一个问题 - 您仍然无法访问protected另一个包中结构的未公开(接近 Java 世界)变量和函数,就像您的情况一样。
但是,您的类型RTree has rtree.RTree, but 永远不会是 a rtree.RTree,并且对于编译器来说永远是不同的类型。
package main
import (
"github.com/intdxdt/rtree"
)
type RTree struct {
rtree.RTree
}
func NewRTree(nodeCap ...int) *RTree {
return &RTree{
RTree: *rtree.NewRTree(nodeCap...),
}
}
在一个单独的节点上,除非你有更多的参数要添加,否则为什么不rtree.RTree直接使用呢?组合它,将为您提供封闭类型的所有方法,但您不能将它传递给任何需要封闭类型的函数。好消息是,您将隐式满足封闭类型所满足的接口,因此您可以将它传递给接受这些接口的函数。
- 1 回答
- 0 关注
- 64 浏览
添加回答
举报