Go/uint
Goのuintについて
Goにおけるuint
は符号なし整数型で、プラットフォームのワードサイズ(32ビットシステムでは32ビット、64ビットシステムでは64ビット)に依存する組み込み型です。
基本情報
uint
は常に正の値のみを扱います(0を含む)- サイズはプラットフォームに依存(uint = uint32 または uint64)
- 値の範囲: 0 から 2^32-1(32ビットシステム)または 0 から 2^64-1(64ビットシステム)
固定サイズのuint型
Goには固定サイズのuint型もあります:
他のキーワードとの組み合わせ
変数宣言との組み合わせ
var count uint = 10 count := uint(10) // 型推論による短縮形
定数定義との組み合わせ
const MAX_USERS uint = 1000
関数パラメータと戻り値
func increment(value uint) uint { return value + 1 }
型変換
i := 42 u := uint(i) // int から uint への変換 f := 3.14 u2 := uint(f) // float から uint への変換(小数点以下切り捨て)
配列とスライス
var numbers [5]uint // uint型の固定長配列 nums := make([]uint, 10) // uint型のスライス
マップ
ages := make(map[string]uint) // 名前から年齢へのマッピング
構造体のフィールド
type User struct { ID uint Age uint Rank uint }
一般的なユースケース
- カウンタ/インデックス
var counter uint = 0 for i := uint(0); i < 10; i++ { counter += i }
- 配列・スライスのインデックス
arr := [5]string{"a", "b", "c", "d", "e"} var index uint = 2 fmt.Println(arr[index])
- ビット操作
var flags uint = 0 // ビットをセット flags |= 1 << 3 // ビットをクリア flags &^= 1 << 2 // ビットをチェック if (flags & (1 << 3)) != 0 { fmt.Println("3番目のビットがセットされています") }
- 正のサイズや容量
func createBuffer(size uint) []byte { return make([]byte, size) }
- IDやハッシュ値の格納
type Resource struct { ID uint Hash uint64 }
- データ構造の実装
type Queue struct { items []int head uint tail uint size uint }
注意点
- オーバーフロー: 最大値を超えると、0に戻ります(ラップアラウンド)
var x uint8 = 255 x++ // x は 0 になる
- 負の値との互換性: 負の値を代入しようとするとコンパイルエラーになります
var u uint = -1 // コンパイルエラー
- int型との混合演算: 明示的な型変換が必要です
var a int = 10 var b uint = 20 // c := a + b // コンパイルエラー c := a + int(b) // 正しい方法
- プラットフォーム依存性: コードのポータビリティを考慮する場合は、
uint
よりuint32
やuint64
など固定サイズの型を使用することが推奨されます
uintを適切に使用することで、正の整数のみを扱う場面でのコードの明確さと安全性を向上させることができます。
カテゴリ:Go