バッファリングされたチャネルがどのように機能するかを理解するのに苦労しています。次の例に基づいて、一度に 2 つのスレッドを利用して現在の時刻を出力しようとしています。2 つの go 呼び出しごとに約 2 秒の遅延があります。
package main
import "fmt"
import "time"
func main() {
returnCurrentTime := func() string {
return time.Now().String()
}
c := make(chan string, 2)
asyncReturnCurrentTime := func(c chan string) {
time.Sleep(2001 * time.Millisecond)
c <- returnCurrentTime()
}
for i := 1; i != 7; i++ {
go asyncReturnCurrentTime(c)
if(i % 3 == 0) {
fmt.Println(<- c)
fmt.Println(<- c)
fmt.Println(<- c)
fmt.Println()
}
}
}
これにより、
2013-02-27 03:17:50
2013-02-27 03:17:50
2013-02-27 03:17:50
2013-02-27 03:17:52
2013-02-27 03:17:52
2013-02-27 03:17:52
秒に関して私が期待しているのは、2回のgo呼び出しの間に2秒の遅延があり、この場合、次の結果です
2013-02-27 03:17:50
2013-02-27 03:17:50
2013-02-27 03:17:52 <- 3rd call with 2 buffer slots
2013-02-27 03:17:54
2013-02-27 03:17:54
2013-02-27 03:17:56 <- 3rd call with 2 buffer slots
明らかに、バッファリングされたチャネルの概念を誤解していました。誰かが私のロジックの障害と、期待される結果を達成する方法を説明してくれませんか?
ありがとうございました