Go言語の基本的な文法についてまとめます。
今回はプログラミングの基本となるデータの型や変数宣言、構造体とうについて調べました。
型の種類
数値
種類 | 型名 | サイズ(bit) | 説明 |
int (符号付き整数) | int8 | 8 | |
int16 | 16 | ||
int32 | 32 | ||
int64 | 64 | ||
int | 32 or 64 | 実装環境によって異なる | |
uint (符号なし整数) | uint8 | 8 | |
uint16 | 16 | ||
unit32 | 32 | ||
uint64 | 64 | ||
uint | 32 or 64 | 実装環境によって異なる | |
float (浮動小数点) | float32 | 32 | |
float64 | 64 | ||
complex (複素数) | complex64 | 64 | 実部 float32 bit, 虚部 float32 |
complex128 | 128 | 実部 float64 bit, 虚部 float64 |
文字
種類 | 型名 | サイズ(bit) | 説明 |
文字 | rune | 32 | シングルクォートで囲んだ一文字 |
文字列 | string | ” または ` で囲まれた文字列 |
その他
種類 | 型名 | サイズ(bit) | 説明 |
真理値 | bool | ||
ポインタ格納 | uintptr | 環境により異なる | ポインタ値を格納するのに十分なサイズ |
変数の宣言
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//変数の宣言 var i int //同一型の複数変数宣言 var i, j, k int //異なる型の複数宣言 var( i, j int k string ) //変数への代入 i = 0 //複数個の代入 i, j = 1, 2 //型指定なしの宣言 i := 1 //int型変数iを宣言し、1で初期化 |
配列とスライス
Go言語には配列とスライスというものがあります。
配列はC言語の配列と似たものです。一方のスライスは多言語で言うところの可変長配列のことになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
/*** 配列 ***/ //要素数5、 要素すべて0のint型配列 var i [5]int i := [5]int{} //要素を指定して配列を宣言 i := [5]int{1, 2, 3, 4, 5} //要素数を省略して宣言 i := [...]int{1, 2, 3, 4} //要素の一部を指定 i := [5]int{1,2} //=> [1, 2, 0, 0, 0] /*** スライス ***/ //スライスの宣言 var i []int i := []int{} i := make([]int, 2, 4) //[]int型、要素数2、容量4のスライスを生成 //要素の追加 i := []int{1, 2, 3} //=> [1, 2, 3] i = append(i, 4, 5) //=> [1, 2, 3, 4, 5] //要素数を調べる i := []int{1, 2} len(i) //=> 2 //スライス式 i := []int{1, 2, 3, 4, 5} i[0:2] //=> [1, 2, 3] i[3:] //=> [4, 5] i[:1] //=> [1, 2] |
構造体
構造体は複数の型の変数を一つにまとめたものです。
Go言語の構造体はC言語の構造体と非常によく似ています。Go言語はクラスがない代わりに、構造体とメソッドを使用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
//構造体の定義 //名前 name フィールド x, yを持つ構造体の宣言 type Name struct{ i int j int k int } //型のエイリアス type integer int //int型のエイリアス(別名)としてinteger型を宣言 //構造体の宣言 var str Name //Name型構造体 strを宣言 str.i //フィールド x にアクセス、 初期値は0 //宣言とともに初期化を行う str := Name{1, 2, 3} str.i //=> 1 str.k //=> 3 str := name{i:1, j:2, k,3} //初期化するフィールドを明示的に指定 //構造体の構造体 type Name struct{ i int } type Name2 struct{ Name Name //フィールドに構造体を入れる } str := Name2{Name:Name{i: 1}} str.Name.i //=> 1 //フィールド名を省略して構造体の構造体を定義 type Name struct{ i int } type Name2 struct{ Name //フィールドに構造体を入れる } str := name2{Name:Name{i:1}} str.i //=> 1 |
ポインタ
ポインタは変数等のメモリ上のアドレスを扱う型です。このポインタも基本的にはC言語のポインタと似ていますが、一部違うところがあります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
//ポインタの宣言 var p *int //intポインタ アドレス演算子による宣言 var i int p := &i //デリファレンス *p = 10 //pの参照先に10を代入 //配列型へのデリファレンス i := [...]int{1, 2, 3, 4, 5} p := &i (*p)[0] //=> 1 p[0] //=> 1 //指定した型のポインタ生成 type Name struct{ i int } p := new(Name) p.i //=> 0 |
関連記事