Tambourine作業メモ

主にスキル習得のためにやった作業のメモ。他人には基本的に無用のものです。

Goのチュートリアルをやる(2)

More types

スライス

スライスが出てきた。スライスの概念はRustで初めて知ったけど、Goも大体同じ

  • 長さと容量を別に持ってる
  • スライスリテラル[]int{5, 4, 3, 2, 1}の様に作る。
  • スライスに要素を追加するには、append()を使う。容量を増やさないといけないときは、ギリギリじゃなくて余裕を持たせて(たぶん基本は倍)増やす。

構造体のスライスのリテラル

宣言と初期化をいっぺんにするのアリ。

s := []struct {
    i int
    b bool
}{
    {2, true},
    {3, false},
    {5, true},
    {7, true},
    {11, false},
    {13, true},
}

Map

キーに対して値をもつかどうかを2つめの戻り値でチェックできる

v, ok := m["key"]

いらなければ、

v := m["key"]

でよい。v, _で受けなくてよいのがGoのスタイルなのかな。

関数

  • 関数を変数に入れる場合の型の指定はfuncを使う。
  • 変数に入った関数のcallは普通に()をつける感じ。
  • Goの関数はクロージャ。環境をバインドする。
func compute(fn func(float64, float64) float64) float64 {
    return fn(3, 4)
}

func main() {
    hypot := func(x, y float64) float64 {
        return math.Sqrt(x*x + y*y)
    }
    fmt.Println(hypot(5, 12))

    fmt.Println(compute(hypot))
    fmt.Println(compute(math.Pow))
}