Goの整数型
最近goを勉強し始めたので、備忘録としてgoの整数型についてまとめます。
符号あり整数
型 | サイズ(bit) | 最小値 | 最大値 |
---|---|---|---|
int8 | 8 | -128 | 127 |
int16 | 16 | -32768 | 32767 |
int32(rune) | 32 | -2147483648 | 2147483647 |
int64 | 64 | -9223372036854775808 | 9223372036854775807 |
確認するにはmath.MinXXX
, math.MaxXXX
を使います。
package main import ( "fmt" "math" ) func main() { fmt.Printf("%d, %d", math.MinInt8, math.MaxInt8) fmt.Printf("%d, %d", math.MinInt16, math.MaxInt16) fmt.Printf("%d, %d", math.MinInt32, math.MaxInt32) fmt.Printf("%d, %d", math.MinInt64, math.MaxInt64) }
符号なし整数
型 | サイズ(bit) | 最小値 | 最大値 |
---|---|---|---|
uint8(byte) | 8 | 0 | 255 |
uint16 | 16 | 16 | 65535 |
uint32 | 32 | 32 | 4294967295 |
uint64 | 64 | 64 | 18446744073709551615 |
uintptr | * | * | * |
uintptr
はポインターの値を指します。
確認するにはmath.MaxXXX
を使います。最小値は常に0なのでメソッドは存在しません。
注意点としては、戻り値は明示的に指定しない限りint
であるということです。また型推論では常にint
になります。
従って、math.MaxUint32
まではint
で表せますが、math.MaxUint64
はint
では表せないので、変数に代入する場合は型を明示的に指定する必要があります。
fmt.Println
などで出力する場合は、型キャストが必要です。
package main import ( "fmt" "math" "reflect" ) func main() { fmt.Println(reflect.TypeOf(math.MaxUint16)) // => int fmt.Println(math.MaxUint32) // => 4294967295 i := math.MaxUint64 // => constant 18446744073709551615 overflows int var j uint64 = math.MaxUint64 fmt.Println(i) // => 18446744073709551615 fmt.Println(math.MaxUint64) // => constant 18446744073709551615 overflows int fmt.Println(uint64(math.MaxUint64)) // => 18446744073709551615 }
特別な理由がない限り、整数を定義するときはint
にすべきです。
型推論ではint
が採用されるのは前述の通りですが、int
は実装系に依存し、32bit系ではint32
, 64bit系ではint64
と同じです。
浮動小数点
型 | サイズ(bit) | 最小値 | 最大値 |
---|---|---|---|
float32 | 32 | ||
float64 | 64 |
複素数
型 | サイズ(bit) | 最小値 | 最大値 |
---|---|---|---|
complex64 | float32の実部と虚部から成る | ||
complex128 | float64の実部と虚部から成る |
complex()
で複素数を生成できる。