我想我的代碼打印:隨時隨地使用通道交替打印
12AB34CD56EF78GH910IJ
但它打印:
12AB3456CDEF78910GHIJ
我很困惑,我覺得很奇怪。
package main
import (
"fmt"
"sync"
)
func main() {
numdone := make(chan int)
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
data := []byte("ABCDEFGHIJ")
for i := 0; i < 10; i = i + 2 {
<-numdone
fmt.Printf("%c", data[i])
fmt.Printf("%c", data[i+1])
}
}()
wg.Add(1)
go func() {
defer wg.Done()
for i := 1; i < 11; i = i + 2 {
fmt.Printf("%d", i)
fmt.Printf("%d", i+1)
numdone <- i
}
}()
wg.Wait()
}
我使用了一個通道,以保證輸出順序,並不會如預期的輸出。 –
你去例行程序#1讀取通道,但在它可以打印之前去例行程序#2計劃並打印下一組數字,以便在輸出中看到3456。 – Ravi