如果要用别名扩展的方式扩展结构体应该怎么做呢
例如,原本有一个treeNode结构体,有Print方法
type treeNode struct{
left, right *treeNode
value int
}
func (node *treeNode) Print(){
fmt.Println(node.value)
}
如果我想扩展这个结构体,给它添加setValue方法,使用别名的方式,那么,我新建一个NewNode结构体,作为treeNode的别名,并添加setValue方法
type NewNode treeNode
func (node *NewNode) setValue(value int){
if node == nil{
return
}
node.value = value
}
然后在main方法中调用:
var new_node NewNode
new_node.setValue(5)
可以调用成功
但是new_node却不能调用treeNode的Print方法了:
new_node.Print()
报错:new_node.Print undefined (type NewNode has no field or method Print)
只能将new_node强转回treeNode类型:
node := treeNode(new_node)
node.Print()
这样我觉得并没有起到扩展的作用呢,不知道是不是我写得不对
另外,为什么我觉得使用内嵌的方式明显比使用组合的方式更简单和合理呢,我感觉内嵌的方式看起来就和继承是一样的(尽管原理不同),而组合的方式太绕了很容易出错,为什么老师推荐使用组合的方式呢
谢谢老师