tanish-kr's learning log

Learning output log

Go

コンポジット型

配列

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