Go/uint
表示
< Go
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型もあります:
uint8: 8ビット符号なし整数(0~255)uint16: 16ビット符号なし整数(0~65535)uint32: 32ビット符号なし整数(0~4294967295)uint64: 64ビット符号なし整数(0~18446744073709551615)uintptr: ポインタを保持するのに十分な大きさの符号なし整数
他のキーワードとの組み合わせ
[編集]変数宣言との組み合わせ
[編集]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を適切に使用することで、正の整数のみを扱う場面でのコードの明確さと安全性を向上させることができます。