たなしょのメモ

日々勉強していることをつらつらと

Goの学習メモ5

Goの学習メモ

昨日はあまりにも眠くてGoの勉強ができませんでした。

Maps

なれない型だ。
キー値に紐付いているらしい。
なのでキー値を指定してあげればデータが取れる。

m["Bell Labs"] = Vertex{
    40.68433, -74.39967
}
m["Jordan"] = Vertex{
    1.3333, -100.1234
}
fmt.Ptintln(m["Jordan"])

上記のコードの場合、”Bell Labs”と"Jordan"というキー値のmapsを作成して、fmt.Ptintln(m["Jordan"]) では"Jordan"を指定している。

var m = map[string]Vertex{
    "Bell Labs":Vertex{
        40.68433, -74.38867,
    },
    "Google":Vertex{
        100.342, 111.234,
    },
    "Benson":Vertex{
        1.1111, 2.222,
    },
}

こんなふうにVertexで囲んで一気に宣言することも可能。

var m = map[string]Vertex{
    "Bell Labs": {40.342, 123.222}
    "Google": {40.342, 123.222}
}

Vertexを省略することも可能らしい。

package main

import "fmt"

func main() {
    m := make(map[string]int)

    m["Answer"]=42
    fmt.Println("The Value:", m["Answer"])
 
    m["Answer"]=48
    fmt.Println("The Value:", m["Answer"])

    delete(m, "Answer")
    fmt.Println("The Value:", m["Answer"])

    v, ok := m["Answer"]
    fmt.Println("The Value:", v, "Present?:", ok)
}

deleteでmapの要素を削除する。

delete(m, "Answer")
fmt.Println("The Value:", m["Answer"])

要素の中身の確認と要素の中に値が存在する場合はTrue、存在しない場合はfalseを返す。

v, ok := m["Answer"]
fmt.Println("The Value:", v, "Present?:", ok)

関数の中に引数として関数をかくこともできる。

package main

import (
    "fmt"
    "math"
)

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))
}

computeが返している3、4をhypotの関数で処理をさせるので(32 + 42)の平方根なので5。
computeが返している3、4をmath.Powで処理をさせるので(34)を計算させるので81。合点がいった。