【发布时间】:2020-07-08 07:20:06
【问题描述】:
以下是简化的 Go 代码。
如你所见,它写了两次String(),有什么办法只写一次吗?
type A struct {
Name string
}
func (u A) String() string {
out, err := json.MarshalIndent(u, "", "\t")
return fmt.Sprintf("A:\n" + string(out))
}
type B struct {
Name string
}
func (u B) String() string {
out, err := json.MarshalIndent(u, "", "\t")
return fmt.Sprintf("B:\n" + string(out))
}
类似于实现struct Base,它有一个方法did(),
然后struct A 和struct B 实现struct Base,因此他们可以调用did() 而无需再次实现did() 本身。
==============
已编辑:
之前的示例代码不是很清楚,现在改了。
struct A 和struct B 有不同的字段,我们如何只写一次String(),然后应用于两个结构?
type A struct {
Name string
Status string
}
func (u A) String() string {
out, err := json.MarshalIndent(u, "", "\t")
return fmt.Sprintf("A:\n" + string(out))
}
type B struct {
ID int
Logo string
}
func (u B) String() string {
out, err := json.MarshalIndent(u, "", "\t")
return fmt.Sprintf("B:\n" + string(out))
}
【问题讨论】:
标签: go inheritance struct embedding