構造体ポインター メソッドのポインターは他のインスタンスに再割り当てできますか?
Go のポインターについて
Go のポインタは、整数と同様、メモリとして解釈される値ですアドレス。 int 型の変数を変更するには、そのポインターへのポインター (int) が渡され、ポイントされたオブジェクト (*i) に新しい値が割り当てられます。
構造体ポインター メソッド内のポインター
ただし、構造体のレシーバー メソッドをレシーバーのポインター (*T) へのポインターにすることはできません。 タイプ。代わりに、次の 2 つのオプションがあります。
**T を受け取る非メソッド関数を定義するポインタを取得し、指定されたオブジェクトを変更します。
メソッドから変更されたポインタを返し、呼び出し元にそれをツリー ポインタを含む変数に割り当てさせます。
懸念事項への対処
メソッドから変更されたポインタを返すことは、Go では一般的な方法です。たとえば、append() 関数は、スライスに要素を追加し、呼び出し元が割り当てる必要がある変更されたスライスを返します。
コード例
オプション 1 の使用ツリーをルートに対して左に回転させるための解決策は、
func rotateLeftToRoot(ptree **AvlTree) { tree := *ptree if tree == nil { return } prevLeft := tree.left if prevLeft != nil { tree.left = prevLeft.right prevLeft.right = tree tree = prevLeft } *ptree = tree }
結論
Go の構造体ポインター メソッドでポインターを再割り当てすることはお勧めできませんが、上で概説した 2 つのオプションはツリー構造を変更するための代替手段となります。変更されたポインタを返し、呼び出し元にそれを割り当てさせることは、Go プログラミングにおける一般的で効果的なアプローチです。
以上がGo 構造体ポインター メソッドはポインターを別のインスタンスに再割り当てできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。