我希望实现fmt.Stringer接口的String方法。但是,对于从派生的一组类型Node,其实String现将是Print必须提供的接口方法的包装。如何String为所有类型的实现自动提供Node?如果我String在某些基类上提供了默认值,那么我将无法访问派生类型(因此也无法访问接口方法Print)。type Node interface { fmt.Stringer Print(NodePrinter)}type NodeBase struct{}func (NodeBase) String() string { np := NewNodePrinter() // somehow call derived type passing the NodePrinter return np.Contents()}type NodeChild struct { NodeBase // other stuff}func (NodeChild) Print(NodePrinter) { // code that prints self to node printer}
3 回答
ABOUTYOU
TA贡献1812条经验 获得超5个赞
Go明确声明不可能:
当我们嵌入一个类型时,该类型的方法成为外部类型的方法,但是当调用它们时,该方法的接收者是内部类型,而不是外部类型。
对于解决方案,我建议这样的事情:
func nodeString(n Node) string {
np := NewNodePrinter()
// do stuff
n.Print(np)
return np.Contents()
}
// Now you can add String method to any Node in one line
func (n NodeChild) String() string { return nodeString(n) }
- 3 回答
- 0 关注
- 225 浏览
添加回答
举报
0/150
提交
取消