ホームページ > バックエンド開発 > Golang > Go 構造体ポインター メソッドはポインターを別のインスタンスに再割り当てできますか?

Go 構造体ポインター メソッドはポインターを別のインスタンスに再割り当てできますか?

Patricia Arquette
リリース: 2024-12-21 02:25:10
オリジナル
628 人が閲覧しました

Can Go Struct Pointer Methods Reassign Pointers to Different Instances?

構造体ポインター メソッドのポインターは他のインスタンスに再割り当てできますか?

Go のポインターについて

Go のポインタは、整数と同様、メモリとして解釈される値ですアドレス。 int 型の変数を変更するには、そのポインターへのポインター (int) が渡され、ポイントされたオブジェクト (*i) に新しい値が割り当てられます。

構造体ポインター メソッド内のポインター

ただし、構造体のレシーバー メソッドをレシーバーのポインター (*T) へのポインターにすることはできません。 タイプ。代わりに、次の 2 つのオプションがあります。

  • オプション 1: 非メソッド関数

**T を受け取る非メソッド関数を定義するポインタを取得し、指定されたオブジェクトを変更します。

  • オプション 2: Return変更されたポインタ

メソッドから変更されたポインタを返し、呼び出し元にそれをツリー ポインタを含む変数に割り当てさせます。

懸念事項への対処

メソッドから変更されたポインタを返すことは、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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート