えいやで会社をやめたらどうなるブログ

SwiftやGolangを中心に書いていくフリーランスエンジニアのブログ。

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