#ポインタの基本的な意味は、特定の値が格納されるメモリ アドレスです。 (学習推奨: go)
Golang では、すべての値をアドレスから取り出すことができるわけではありません (ただし、const などのメモリにも格納されます)。 、すべての変数はアドレスを取得できる必要があります。
変数は、メモリ領域 [1] に格納される値です。よく知られている var x int の x が変数であるだけでなく、sliceA[0]、mapB["key"]、structC.FieldD などのより複雑な式でも変数を表すことができます。つまり、それぞれが独自のポインターを持つことができます。
構造体の変数の内容を変更する必要がある場合、メソッドによって渡される構造体変数パラメーターでは、構造体のアドレスであるポインターと、アーキテクチャーの変数を使用する必要があります。マップを変更する必要がある場合や、マップの値として構造体のアドレスを使用する必要がある場合もあります。
Go は新しい構造体ポインターを直接作成できます
Golang では、ptr := &A{Value: 1} を通じて構造体を取得できます。本体 A の値; しかし、C では別の代入ステートメントを通じて取得することはできません:
typedef struct { int value; } A;A *ptr1; // 无法给 ptr 所指的值赋值 A *ptr2 = &A{1}; // 没有这样的语法 A a = {1}; // 再通过 &a 可以得到指针
この違いが単に文法上の外観である場合、他の違いはバグに関連している可能性があります。
2. Go ではローカル変数へのポインタを安全に返すことができます
上記の C コード例では、実際にいくつかの変数を宣言できますが、これらの宣言が完了している場合は、
A *init(){ A *ptr; return ptr;}
または
A *init(){ A a; return &a;}
のようなメソッド内で、この宣言されたローカル変数は自動変数 (自動変数[3]) であり、元のメソッドも init( ) メソッドが終了すると、これらの自動変数は「消滅」します。
以上がgolangポインタの使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。