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。合点がいった。