ホームページ >バックエンド開発 >Golang >Go でポインター レシーバーを使用して単純な型の値を変更する方法

Go でポインター レシーバーを使用して単純な型の値を変更する方法

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-19 11:32:02516ブラウズ

How to Modify a Simple Type's Value Using a Pointer Receiver in Go?

Go のポインター レシーバーによる単純型の値の変更

ポインター レシーバー メソッドによる単純型の値の変更は、 Go の一般的なタスク。ただし、このコンテキストでポインターがどのように動作するかを理解することが重要です。

提供された例では:

<br>type FooInt int</p>
<p>func (fi *FooInt ) FromString(i 文字列) {</p>
<pre class="brush:php;toolbar:false">num, _ := strconv.Atoi(i)
tmp := FooInt(num)
fi = &tmp

}

ポインターがレシーバーとして渡されると、そのポインターのコピーがメソッド内で作成されます。メソッド内のコピーに加えられた変更は、元のポインターには影響しません。

コード スニペットの *fi は、FromString メソッドに渡される fi ポインターのコピーです。 &tmp を *fi に割り当てると、基本的に元の fi ポインターではなく、コピーの値が変更されます。

元のポインターの値を変更するには、次のいずれかを行う必要があります。

  • 新しいポインタ値を返します:

    <br> func (fi <em>FooInt) FromString(i string) </em>FooInt {</p>
    <pre class="brush:php;toolbar:false">  num, _ := strconv.Atoi(i)
      tmp := FooInt(num)
      return &tmp

    }

  • 非 nil を渡す変更する値へのポインタ:

    <br> func (fi <em>FooInt) FromString(i string, p </em>*FooInt) {</p>
    <pre class="brush:php;toolbar:false">  num, _ := strconv.Atoi(i)
      tmp := FooInt(num)
      *p = &tmp

    }

  • 受信側が nil でないことを確認します:

    <br> func (fi *FooInt) FromString(i string ) {</p>
    <pre class="brush:php;toolbar:false">  num, _ := strconv.Atoi(i)
      *fi = FooInt(num)

    }

レシーバーが有効なポインターであることを確認し、メソッド内でポイントされた値を変更することで、ポインター レシーバーを介して元の単純型の値を効果的に変更できます。 .

以上がGo でポインター レシーバーを使用して単純な型の値を変更する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。