構造体フィールドの復帰
提供された Go コードでは、メソッド内で構造体フィールドが変更されたにもかかわらず、そのメソッド内に戻るという奇妙な動作が観察されます。後で確認すると元の値になります。この問題は、構造体が ポインタ ではなく 値 で渡されるという事実に起因します。
説明:
TVManager 構造体の sendMessage メソッドで、コネクタ構造体の sendCommand メソッドが、 TVManager 構造体。構造体が値によって渡される場合、構造体の コピー が作成され、元の構造体への参照の代わりに渡されます。
MockConnector 構造体の sendCommand メソッドでは、コネクタ構造体 (last_command、value など) が変更されます。ただし、コネクタは値によって渡されるため、変更は元の構造体ではなく、構造体の コピー にのみ適用されます。
この問題を解決するには、 sendCommand メソッドは、値ではなくポインタで渡される必要があります。これにより、メソッドはコピーではなく、元のコネクタ構造体を変更できるようになります。
解決策:
置換:
func (this MockConnector) sendCommand(payload map[string]string)
次:
func (this *MockConnector) sendCommand(payload map[string]string)
追加考慮事項:
以上がメソッド呼び出し後に Go 構造体フィールドが元に戻るのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。