golangメソッドを使用したメソッドを使用して、メソッドを介してインスタンスの値を変更しようとするときに、ポインターの概念を理解することが重要です受信機。この例では、受信機がポインタータイプではないため、SetSomeFieldメソッドは予想どおりに機能していません。 func(i *実装)setsomefield(newValue String){ ... }
ただし、この変更は新しい問題を導入します。GetSomeFieldメソッドにはまだ値レシーバーがあるため、構造体はインターフェイスを実装しなくなりました。インターフェイスの実装。そうすることで、コピーを作成せずに実際のインスタンスを変更できるようにします。これが修正されたコードです:タイプiface interface { setsomefield(newValue文字列) getSomefield()文字列 } タイプ実装struct { Somefield String } func(i *実装)getsomefield()string { i.somefieldを返します } func(i *実装)setsomefield(newValue String){ i.somefield = newValue } func create() *実装{ return&実装{somefield: "hello"} } func main(){ var a iface a = create() A.SetsomeField( "World") fmt.println(a.getsomefield()) }
この更新されたコードでは、Create関数は実装構造へのポインターを返し、IFACEインターフェイスを実装します。その結果、IFACEのタイプの変数は、実装構造のポインターを参照して、SetSomeFieldメソッドがその値を変更できるようにすることができます。
。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3