Go 言語は、int8、int16、int32、および int64 を含む、符号付き整数型と符号なし整数型を同時に提供します。 8、16、32、64 ビット (バイナリ ビット) サイズに対応する、サイズの異なる 4 つの符号付き整数型。 4 つの符号なし整数型 uint8、uint16、uint32、および uint64。
また、特定の CPU プラットフォームの語長 (マシン語サイズ) に対応する 2 つの整数型が int と uint があり、このうち int は最も広く使用されている符号付き整数を意味し、uint は符号なし整数を意味します。実際の開発では、コンパイラやコンピュータ ハードウェアの違いにより、int と uint が表現できる整数のサイズは 32 ビットと 64 ビットの間で異なります。
ほとんどの場合、整数型 int のみが必要です。これは、ループ カウンター (for ループのループ数を制御する変数)、配列およびスライスのインデックス、および汎用整数演算子に使用できます。通常は、 int 型も最速です。
Unicode 文字を表すために使用されるルーン型は int32 型と同等であり、通常は Unicode コード ポイントを表すために使用されます。これら 2 つの名前は同じ意味で使用されます。同様に、byte と uint8 も同等の型であり、一般に byte 型は、値が小さな整数ではなくプリミティブ データであることを強調するために使用されます。
最後に、符号なし整数型 uintptr があります。これは特定のビット サイズを指定しませんが、ポインターを保持するには十分な大きさです。 uintptr 型は、低レベルのプログラミング、特に Go が C ライブラリまたはオペレーティング システム インターフェイスと対話する場合にのみ必要です。
int、uint、および uintptr のサイズは、一部の特定の動作環境では等しい場合がありますが、int と int32 など、依然として異なる型です。ただし、int 型のサイズも 32 ビットである可能性がありますが、 int 型 int32 型は使用時に明示的に変換する必要があり、その逆も同様です。
Go 言語の符号付き整数は 2 の補数形式で表現されます。つまり、最上位ビットが符号ビットを表すために使用され、n ビットの符号付き数値の値の範囲は -2 (n-1)から 2 ( n -1) -1。符号なし整数のすべてのビットは非負の数値を表すために使用され、値の範囲は 0 ~ 2 n -1 です。たとえば、int8 型の整数は -128 から 127 までの値を取ることができ、uint8 型の整数は 0 から 255 までの値を取ることができます。
int と uint を使用する場合
プログラム ロジックには、整数の範囲に関する特別な要件はありません。たとえば、オブジェクトの長さは組み込みの len() 関数を使用して返されますが、この関数はプラットフォームごとにバイト長に応じて異なる場合があります。実際の使用では、スライスやマップの要素数は int で表現できます。
逆に、バイナリ転送やファイル構造記述の読み書きでは、異なるコンパイル対象プラットフォームのバイト長にファイル構造が影響されないようにするため、int、uint は使用しないでください。