A Tour of Go31~41学習メモ
こんにちは。がわわです。
sliceとmapが主な内容です。
参照渡し、値渡しって注意しないとなんだかよくわからなくなっちゃいますね。
【slice】
- sliceはarrayのように要素数を明示的に表示しない柔軟な配列
- sliceにsliceを代入する際は参照を渡す
- sliceやarrayにarrayを代入するときは値を渡す
- 容量は最大の要素数のこと
- sliceはs[start: last]でstart〜last-1までの値をスライスsから参照する
- Golangでは基本的にslice推奨のよう
- for文でのrangeはsliceやmapを反復処理する
- _(アンダーバー)は代入すると破棄される
- appendすると渡されていた参照がリセットされる
range使用例
//iはsliceの添字, vはslice[添字]の値 for i, v := range slice { fmt.Printf("i == %d, v == %d\n", i, v) }
appendの話
package main import "fmt" func main() { a := []int{11, 12, 13} b := a a[0] = 100 //a == [100, 12, 13], b == [100, 12, 13] a = append(a, 14) a[0] = 200 //a == [200, 12, 13, 14], b == [100, 12, 13] }
【map】
- delete(map, key)でmapのkeyに対応するvalue削除
- v, ok := map[key]でkeyに対応するvalueがあるか否かがokに代入される(true or false)
A Tour of Go41 Exercise: Mapsの解答
package main import ( "code.google.com/p/go-tour/wc" "strings" ) func WordCount(s string) map[string]int { m := make(map[string]int) for _, v := range strings.Fields(s) { m[v] += 1 } return m } func main() { wc.Test(WordCount) }