3 回答
TA贡献1852条经验 获得超1个赞
您可以环绕 Base 以添加必要的String()功能。这是一种方法:
type StreamerToStringer struct {
Base
}
func (s StreamerToStringer) String() string {
var buffer bytes.Buffer
s.Base.ToStream(&buffer)
return string(buffer.Bytes())
}
有了这个,你可以增加任何Base实例,让它有一个String()方法。
func main() {
aBase1 := StreamerToStringer{new(Impl1)}
aBase2 := StreamerToStringer{new(Impl2)}
fmt.Printf("%s\n", aBase1)
fmt.Printf("%s\n", aBase2)
// These wrapped values still support ToStream().
var buffer bytes.Buffer
aBase1.ToStream(&buffer)
fmt.Println(buffer.Bytes())
}
TA贡献1820条经验 获得超10个赞
似乎 Java 思维在这里阻止了您 :-)
虽然Java有方法只去不具备的功能。当然,你不能在接口上有方法,但你可以制作一个简单的函数,接受 aBase并做一些事情:
func Base2String(b Base) string {
var buffer bytes.Buffer
b.ToStream(&buffer)
return string(buffer.Bytes())
}
现在,如果您将 Base 重命名为 Go 风格的东西(请记住,Go 中没有类型层次结构),您将获得一些不错的代码。
- 3 回答
- 0 关注
- 168 浏览
添加回答
举报