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

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

Susan Sarandon
リリース: 2024-12-28 08:00:31
オリジナル
296 人が閲覧しました

Can a Go Struct Pointer Method Reassign its Receiver Pointer to a Different Instance?

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

Go 構造体メソッドでポインターを操作する場合、プライマリ メソッドを再割り当てする別のインスタンスへのポインタは難しい場合があります。これは、通常の Go 構造体へのポインタの再割り当てとは異なります。

背景: ポインタ値

Go では、ポインタは別の変数のメモリ アドレスを格納する値です。ポインター値を変更する場合、実際にはポインター自体ではなく、ポイントされた変数を変更することになります。

ポインター メソッドとレシーバーの基本型

Go では、構造体ポインター メソッドは次のようにする必要があります。レシーバーの基本型は T です。ここで、T は構造体の型です。これは、受信者が T へのポインターへのポインターになることができないことを意味します。

ポインターの再割り当てオプション

1。ポインタをポインタ関数に渡す:

これには、構造体へのポインタへのポインタを受け取る非メソッド関数の記述が含まれます。関数内で、ポイントされたポインターを変更できます。

func rotateLeftToRoot(ptree **AvlTree) {
    // Pointer to the pointer to the AvlTree
    tree := *ptree

    // Update pointer to the new root
    *ptree = tree
}
ログイン後にコピー

2.更新されたポインタを返す:

これには、メソッドから更新されたポインタを返し、それを呼び出しコード内の目的の変数に割り当てることが含まれます。

func (tree *AvlTree) rotateLeftToRoot() *AvlTree {
    // Update pointer to the new root
    prevLeft := tree.left
    if prevLeft != nil {
        tree.left = prevLeft.right
        prevLeft.right = tree
        tree = prevLeft
    }
    return tree
}

// Usage:
tree = tree.rotateLeftToRoot()
ログイン後にコピー

ツリー一般:

Go では、特にデータ構造操作において、メソッドからツリーを返すことは珍しいことではありません。 Go 標準ライブラリの append() 関数が更新されたスライスを返すのと同じように、目的のツリーを更新するには、変更されたツリー ポインタを返すことが必要な場合があります。

以上がGo 構造体ポインター メソッドはレシーバー ポインターを別のインスタンスに再割り当てできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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