ポインター (& と *) を理解する
Go では、多くの場合、変数を関数の引数として渡す必要があります。ただし、このような操作中にエラーが発生すると、混乱を招く可能性があります。この記事では、& と * ポインターの違いを明確にし、それぞれをいつ使用する必要があるかを説明します。
ポインターとアドレス
ポインターは、別の変数のアドレスを格納する変数です。メモリ。 & 演算子は変数のアドレスを取得します。たとえば、「u」が User 構造体の場合、「&u」は「u」のアドレスを返します。
&
による JSON のデコード& 演算子を理解するには次のコードを考えてみましょう:
var u User if err := decoder.Decode(&u); err != nil { // Code to handle error... }
json.Decode 関数は、JSON をデコードするためのポインターを予期します。データを入れます。この例では、「u」は単なるユーザー構造体であり、ポインターではありません。 「&u」を使用することで、関数に「u」のアドレスを指定し、デコードを成功させます。
ポインタとリダイレクト
演算子これは、ポインタのアドレスに格納されている値への「リダイレクト」と考えることができます。たとえば、ポインタ 'x' に 'y' のアドレスが格納されている場合、'x' は 'y' の値を返します。
次のコードを考えてみましょう:
x := new(User) // Creates a pointer to a User struct *x = y // Assigns the value of 'y' to the struct pointed to by 'x' fmt.Println(*x) // Prints the value of 'y'
使用法の概要
以上がGo ポインター: `&` と `*` をいつ使用するか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。