ホームページ > バックエンド開発 > Golang > Go ポインター: 「&」と「*」の違いとその使用方法

Go ポインター: 「&」と「*」の違いとその使用方法

Mary-Kate Olsen
リリース: 2024-11-30 18:40:11
オリジナル
483 人が閲覧しました

Go Pointers: What's the Difference Between `&` and `*` and How Are They Used?

& および * ポインター: 違いと使用法

Go では、関数の引数は値または参照で渡すことができます。値によって渡す場合、変数のコピーが作成され、関数に渡されます。参照渡しの場合、代わりに変数のアドレスが渡されるため、関数は元の値を変更できます。

この参照渡しの概念は、ポインターを使用して実現されます。ポインタは、別の変数のアドレスを保持する変数です。 & 演算子は変数のアドレスを返しますが、* 演算子はアドレスに格納されている値にアクセスするために使用されます。

& の使用

& 演算子は変数を参照によって渡すために使用されます。関数の引数。たとえば、次の関数について考えてみましょう。

func SendNotification(user *User) {
    // ...
}
ログイン後にコピー

この関数は引数として *User を予期します。ここで、* は引数が User 構造体へのポインタであることを示します。 User 型の変数 u を渡すには、次のように & 演算子を使用する必要があります。

SendNotification(&u)
ログイン後にコピー

これにより、u のアドレスが関数に渡され、元の値を変更できるようになります。

* の使用

* 演算子は、アドレスに格納されている値にアクセスするために使用されます。たとえば、次のコードの場合:

var userPtr *User
userPtr = &u
ログイン後にコピー

userPtr は、u に格納されている User 構造体のアドレスを保持するポインターです。このアドレスに格納されている値にアクセスするには、* 演算子を使用できます。

*userPtr = User{name: "John"}
ログイン後にコピー

これにより、userPtr に格納されているアドレスにある User 構造体に新しい値が割り当てられます。

区別と使用法

& と * の違いは、その機能にあります。 & は変数のアドレスを取得するために使用され、参照によって渡すことができます。 * は、アドレスに格納されている値にアクセスするために使用され、元の値を変更できます。

実際には、& は関数への参照によって変数を渡すために一般的に使用され、* は格納された値を変更するために使用されます。メソッド内でポインタをレシーバとして使用する場合など、アドレスで使用します。

使用例

次のことを考慮してください。 code:

func main() {
    u := User{name: "Jane"}

    SendNotification(&u) // Passing by reference

    fmt.Println(u.name) // Prints "Jane"
}
ログイン後にコピー

ここで、SendNotification 関数は引数として *User を取ります。 &u を渡すことで、関数が u の元の値を変更できるようになります。関数内で、値は次のように変更できます。

func SendNotification(user *User) {
    user.name = "John"
}
ログイン後にコピー

これにより、参照によって渡された User 構造体の名前が変更されます。

以上がGo ポインター: 「&」と「*」の違いとその使用方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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