13. 共有の変数を使う
n := 1
go func() {
for i := 2; i <= 5; i++ {
fmt.Println(n, "*", i)
n *= i
time.Sleep(100)
}
}()
http://play.golang.org/p/yqk82u0E4V
for i := 1; i <= 10; i++ {
fmt.Println(n, "+", i)
n += 1
time.Sleep(100)
}
競合
14. データ競合の解決方法
■ 問題点
● どのGoroutineが先にアクセスするか分からない
● 値の変更や参照が競合する
■ 解決方法
● 1つの変数には1つのGoroutineからアクセスする
● Channelを使ってGoroutine間で通信をする
● またはロックをとる(syncパッケージ)
"Do not communicate by sharing memory; instead,
share memory by communicating"