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 關注
- 186 瀏覽
添加回答
舉報