Go 中的多態性:解碼Setter 難題
在物件導向程式設計領域,多態性使得能夠處理不同類別的物件作為公共超類型的實例。然而,在 Go 中,問題出現了:多態性是否存在,如果存在,它是如何體現的?
考慮以下Go 程式碼,其中嘗試建立具有getter 和setter 方法的介面:
type MyInterfacer interface { Get() int Set(i int) } type MyStruct struct { data int } func (this MyStruct) Get() int { return this.data } func (this MyStruct) Set(i int) { this.data = i }
但是,setter 方法遇到了一個問題:接收者this MyStruct 不是指針,導致方法內所做的任何更改一旦丟失退出。此外,使接收器成為 *MyStruct 會阻礙編譯。
為了解決這個問題,程式碼的修正版本使用了指針:
type MyInterfacer interface { Get() int Set(i int) } type MyStruct struct { data int } func (this *MyStruct) Get() int { return this.data } func (this *MyStruct) Set(i int) { this.data = i }
透過引入指針,我們可以在setter 方法持續超出其範圍。雖然這種技術可能不構成傳統意義上嚴格的多態性,但它堅持了良好的 Go 實踐,並為最初的問題提供了可行的解決方案。
以上是Go中如何使用setter實現多型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!