4. 型
Go言語で使用できるのは以下の型です。
4.1 ゼロ値
変数を宣言もしくはnew、makeなどで明示的な初期値が与えずに作成するとデフォルト値が割り当てられます。
これをゼロ値といいます。
型 |
例 |
Boolean |
false |
数値型(Integer) |
0 |
数値型(Float) |
0.0 |
文字列型 |
""(空文字) |
配列型 |
配列の要素の型のゼロ値からなる配列 |
スライス型 |
nil |
ポインタ型 |
nil |
関数型 |
nil |
インターフェース型 |
nil |
マップ型 |
nil |
チャネル型 |
nil |
4.2 Boolean型
- 真偽値を扱う型です。
- ゼロ値は false です。
4.3 数値型
- 数値(整数、浮動小数点数、複素数)を扱う型です。
- ゼロ値は 整数は 0 、浮動小数点数は 0.0 です。ただし、complex64とcomplex128のみ 0+0i です。
型 |
説明 |
uint8 |
the set of all unsigned 8-bit integers (0 to 255) |
uint16 |
the set of all unsigned 16-bit integers (0 to 65535) |
uint32 |
the set of all unsigned 32-bit integers (0 to 4294967295) |
uint64 |
the set of all unsigned 64-bit integers (0 to 18446744073709551615) |
- |
- |
int8 |
the set of all signed 8-bit integers (-128 to 127) |
int16 |
the set of all signed 16-bit integers (-32768 to 32767) |
int32 |
the set of all signed 32-bit integers (-2147483648 to 2147483647) |
int64 |
the set of all signed 64-bit integers (-9223372036854775808 to 9223372036854775807) |
- |
- |
float32 |
the set of all IEEE-754 32-bit floating-point numbers |
float64 |
the set of all IEEE-754 64-bit floating-point numbers |
- |
- |
complex64 |
the set of all complex numbers with float32 real and imaginary parts |
complex128 |
the set of all complex numbers with float64 real and imaginary parts |
- |
- |
byte |
alias for uint8 |
rune |
alias for int32 |
- uint、intはアーキテクチャによって異なりますが、uintが32bitだとしてもuintとuint32は異なる型として扱わなければなりません。
型 |
説明 |
uint |
either 32 or 64 bits |
int |
same size as uint |
uintptr |
an unsigned integer large enough to store the uninterpreted bits of a pointer value |
4.4 文字列型
4.5 配列型
- 特定の型の長さ0個以上の固定長列の型です。
- 配列の長さを含めて型なので、
[3]int
と [5]int
は異なる型として扱われます。
- ゼロ値は配列の要素に指定した型のゼロ値の配列となります。
型 |
例 |
[3]string |
[3]string{"Apple", "Banana", "Caramel"} |
[10]int |
[10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} |
[3][5]int |
[3][2]int{{11, 12}, {21, 22}, {31, 32}} |
4.6 スライス型
- スライスは特定の型の長さ0個以上の可変長列の型で、ベースとなる配列を指し示す記述子です。
- ゼロ値は nil です。
型 |
例 |
[]string{} |
[]string{"Apple", “Banana”, "Caramel"} |
[]int{} |
[]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} |
4.7 構造体型
- 構造体はフィールドと呼ばれる名前付き要素のシーケンスであり、各フィールドは名前と型を持ちます。
- フィールド名は明示的 または暗黙的 に指定することができます。
- 構造体内では、空白でないフィールド名は一意でなければなりません。
- ゼロ値は nil です。
// An empty struct.
struct {}
// A struct with 6 fields.
struct {
x, y int
u float32
_ float32 // padding
A *[]int
F func()
}
4.8 ポインタ型
- 与えられた型の変数へのポインタです。
- ゼロ値は nil です。
*string
*[4]int
4.9 関数型
- 同じパラメータと結果型をもつ関数です。
- ゼロ値は nil です。
func()
func(x int) int
func(a, _ int, z float32) bool
func(a, b int, z float32) (bool)
func(prefix string, values ...int)
func(a, b int, z float64, opt ...interface{}) (success bool)
func(int, int, float64) (float64, *[]int)
func(n int) func(p *T)
4.10 インターフェース型
- インターフェースではメソッドセットを指定します。
- インターフェース型の変数は、インターフェースで指定したメソッドセットを持つ任意のタイプの値を格納できます。
- ゼロ値は nil です。
例えば、以下のようなインターフェースがあります。
type Locker interface {
Lock()
Unlock()
}
このインターフェースを満たすメソッドを定義します。
type T struct{}
func (p T) Lock() { … }
func (p T) Unlock() { … }
これで T は、Lockerインターフェースを実装したとなります。
4.11 マップ型
- 特定の型をキーに、特定の型を値にした順不同な要素セットです。
- ゼロ値は nil です。
map[string]int
map[*T]struct{ x, y float64 }
map[string]interface{}
4.12 チャネル型
- 特定の型の値をやりとりするのに使われる型です。
- 並行処理(goroutineなど)ではこのチャネル型を通して、処理間のデータ受け渡しを行います。
- ゼロ値は nil です。
chan T // 送受信(T型)
chan<- float64 // 送信のみ(float64型)
<-chan int // 受信のみ(int型)