Go言語の勉強をしていて、時折出現するgoroutineを使用した無名関数。
例えば、以下のようなmainからAddメソッドに値を渡している処理です。
func main() {
for i := 0; i < 50; i++ {
go func(t int) {
dc.Add(t)
}(i % 2)
}
}
func (dc *DoubleCounter) Add(t int) {
dc.commandCh <- t // commandChはチャンネル
}
初めにこれを目にした時、go func( ){ 処理 }( )の初めの丸括弧に記載されている(t int)、最後の丸括弧に記載されている(i % 2)がどういった挙動をしているかわかりませんでした。
しかし、デバックして追っかけてみると、Addメソッドには0と1しか値として渡っていませんでした。
ということは、先程の無名関数は変数iの値をまずは2で割って、そのあまりを今度は無名関数の初めの括弧に渡してあげて、そこで変数tに値が入ってその値がAddメソッドに流れていくということになります。
恐らく、この流れになっていくとは思うのですが、
もし何か間違いや言い回しの部分でおかしい箇所があればご指摘いただけると嬉しいです!
よろしくお願いいたします。