Go では、スライスは配列、長さ、および容量へのポインターによって定義されます。ただし、スライスには、nil スライス、長さと容量がゼロの非 nil スライス、空のスライスなど、さまざまなタイプがあります。
Nil スライスには、参照する基礎となる配列がありません。したがって、長さと容量はゼロになります。これらは本質的に、要素がないかのように動作する存在しないスライスです。
これらのスライスは、長さ 0、容量 0 で初期化されます。 nil スライスとは異なり、それらは参照するための基礎となる配列を持っていますが、それは空です。 nil 以外のスライスはサイズが大きくなる可能性があるのに対し、nil スライスはサイズが大きくならないため、この区別は重要です。
空のスライスは、長さと容量がゼロの非 nil スライスと本質的に同じです。 。ただし、「空のスライス」という用語は、nil であるか非 nil であるかに関係なく、特定のスライスに要素がないことを強調するためによく使用されます。長さと容量がゼロの nil スライスは、同じ内部構造を共有しない可能性があり、ほぼ同一の観察対象を示します。動作:
これらは、長さと容量の情報を取得するために、len() 関数と cap() 関数に渡すことができます。これらは、for range ループで反復処理できますが、反復はありません。スライスが空です。その長さをゼロと比較します: len(s) == 0。これは、nil と非 nil の両方の空の場合に true を返します。
スライスの内部表現では、ポインタは基礎となる配列を指します。 nil 以外の空のスライスの場合、このポインタは nil にならない可能性があります。ただし、サイズがゼロの基になる配列を指します。 Go の仕様では、異なるタイプのサイズ 0 の値が同じメモリ アドレスを持つことが許可されています。
以上がGo における nil、非 nil、および空のスライスの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。