コンポジット型
配列
var a [3]int
配列リテラル
var q [3]int = [3]int{1, 2, 3}
q := [...]int{1, 2, 3} // 配列長は初期化の数で決まる
スライス
すべての要素が同じ型である可変長列をあらわす。 コロンで区切られた2つのインデックスlowとheightの協会を指定することによってスライスが形成される
a[low : hight]
primes := [6]:int{2, 3, 5, 7, 11, 13}
var s []int = primes[1:4]
比較
2つのスライスが同じ要素で構成されているかを検査するのに==
は使えない。
- 配列要素と異なりスライスの要素は間接的であり、スライスが自分自身を含むことを可能にしている
- 固定されたスライス値でも基底配列の内容が修正される際には時により異なった要素を含んでいるかもしれない
append関数
スライスに項目を追加する
q := []int(2, 3, 5, 7, 11, 13)
fmt.Println(q)
q = append(q, 100)
fmt.Println(q)
top := q[len(q) - 1] // スタックのTop
fmt.Println(top)
q = q[:len(q) - 1] // ポップ
fmt.Println(q)
マップ
map
はキーと値を関連付ける。make
関数は指定された方の、初期化され使用できるようにしたマップを返す
ages := make(map[string]int)
ages := map[string]string{"name": "Tanaka", "sex": "man", "age": "32"}
delete(map, key)
対象のキーの値をマップから削除する
構造体
構造体は合成データ型であり、0個以上の任意の方の名前付き値を単一エンティティにまとめている
構造体リテラル
正しい順序で値を指定する必要がある。
type Employee struct {
ID int
Name string
Address string
}
func main() {
emp := Employee{1, "Bob", "bob@gmail.com"}
fmt.Println(emp.ID, emp.Name, emp.Address)
emp.ID = 2
fmt.Println(emp.ID, emp.Name, emp.Address)
}
以下の形式で初期化のフィールド指定ができる
emp := Employee{Address: "hoge@hoge.com"}
比較
==
は2つの構造体の対応するフィールドを順番に比較する
構造体埋め込みと無名フィールド
無名フィールドの型は名前つき型か、名前つき型のポインタでなければならない
JSON
- マーシャリング : Goのデータ構造をJSONに変換する
- アンマーシャリング : JSONをデコードしてGoのデータ構造のフィールド設定する
import "encoding/json"
func main() {
data, err := json.Marshal(raw)
data, err := json.UnMarshal(json_data)
}
テンプレート
HTMLテンプレート
html/template
テキストテンプレート
text/template