ポインタ レシーバーを使用した Golang メソッド [重複]
問題:
Go では、ポインタ レシーバを使用してメソッドを作成し、インターフェイスを実装すると、次のエラーが発生する可能性があります。発生:
cannot use obj (type Implementation) as type IFace in return argument: Implementation does not implement IFace (GetSomeField method has pointer receiver)
回答:
このエラーを解決するには、構造体へのポインターがインターフェイスを実装していることを確認してください。これにより、メソッドはコピーを作成せずに実際のインスタンスのフィールドを変更できます。
コードの変更:
問題の行を次のように置き換えます:
return &obj
説明:
へのポインタを返すことによって、 struct を使用すると、メソッドが実際のインスタンスを変更できるようにしながらインターフェイスを実装します。
例 (変更):
package main import ( "fmt" ) type IFace interface { SetSomeField(newValue string) GetSomeField() string } type Implementation struct { someField string } func (i *Implementation) GetSomeField() string { return i.someField } func (i *Implementation) SetSomeField(newValue string) { i.someField = newValue } func Create() *Implementation { return &Implementation{someField: "Hello"} } func main() { var a IFace a = Create() a.SetSomeField("World") fmt.Println(a.GetSomeField()) }
ポインター レシーバーを使用し、ポインターがインターフェイスを実装すると、必要なメソッドを実装しながら、構造体の実際のインスタンスを正常に変更できます。
以上がポインター レシーバーを使用した Go メソッドがインターフェイスの実装に失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。