Go のインターフェイス セッター メソッドにポインターが必要なのはなぜですか?
Nov 23, 2024 am 11:35 AMGo におけるポリモーフィズム: インターフェイスの実装
Go は従来のポリモーフィズムをサポートしていませんが、インターフェイスは同様の効果を達成する手段を提供します。ただし、setter メソッドの実装には制限が存在します。
問題
次のコードを考えてみましょう:
type MyInterfacer interface { Get() int Set(i int) } type MyStruct struct { data int } func (this MyStruct) Get() int { return this.data }
Set メソッドの結果を実装しようとしましたでエラー:
func (this MyStruct) Set(i int) { this.data = i }
解決策
この制限を回避するには、Set メソッドのレシーバーは次のようにポインターである必要があります。
func (this *MyStruct) Set(i int) { this.data = i }
これにより、メソッドが基になるデータを変更できるようになり、インターフェースに反映されます。 variable.
修正されたコード
次の修正されたコードは意図したとおりに動作します:
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 } func main() { s := &MyStruct{123} fmt.Println(s.Get()) s.Set(456) fmt.Println(s.Get()) var mi MyInterfacer = s mi.Set(789) fmt.Println(mi.Get()) }
真のポリモーフィズムではありませんが、この手法により同様のことが可能になります。 Go でのインターフェイス実装による柔軟性のレベル。
以上がGo のインターフェイス セッター メソッドにポインターが必要なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

人気の記事

人気の記事

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか?

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか?

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか?

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか?

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は?

GOの実際のパフォーマンスを正確に反映するベンチマークを作成するにはどうすればよいですか?
