I got some trouble about goroutine concurrent. In my expect, it should run asynchronously and print out almost at same time but what it really did was running with waiting
MyTestCode
package main
type batchD []string
var cBD = make(chan batchD, 6)
func main() {
runtime.GOMAXPROCS(runtime.NumCPU())
data := [][]string{}
data = append(data, []string{"71", "40348270", "6", "win888e", "6", "1", "N", "127.0.0.1"})
data = append(data, []string{"71", "40348270", "6", "win888e", "6", "1", "N", "127.0.0.1"})
data = append(data, []string{"71", "40348270", "6", "win888e", "6", "1", "N", "127.0.0.1"})
data = append(data, []string{"71", "129499244", "6", "win888e", "6", "1", "N", "127.0.0.1"})
data = append(data, []string{"71", "40348270", "6", "win888e", "6", "1", "N", "127.0.0.1"})
data = append(data, []string{"71", "40348270", "6", "win888e", "6", "1", "N", "127.0.0.1"})
for k,v := range data {
go func() {
fmt.Println(k,v)
//batchD{}.BatchDeposit(v[0],v[1],v[2],v[3],v[4],v[5],v[6],v[7])
delay()
cBD <- data[k]
}()
<-cBD
}
}
func delay() {
time.Sleep(1 * time.Second)
t := Basic.NowTime("Taipei")
fmt.Println(t)
}
Output I got
0 [71 40348270 6 win888e 6 1 N 127.0.0.1]
2017-08-16 12:00:40
1 [71 40348270 6 win888e 6 1 N 127.0.0.1]
2017-08-16 12:00:41
2 [71 40348270 6 win888e 6 1 N 127.0.0.1]
2017-08-16 12:00:42
3 [71 129499244 6 win888e 6 1 N 127.0.0.1]
2017-08-16 12:00:43
4 [71 40348270 6 win888e 6 1 N 127.0.0.1]
2017-08-16 12:00:44
5 [71 40348270 6 win888e 6 1 N 127.0.0.1]
2017-08-16 12:00:45
Output I Expected
0 [71 40348270 6 win888e 6 1 N 127.0.0.1]
2017-08-16 12:00:40
1 [71 40348270 6 win888e 6 1 N 127.0.0.1]
2017-08-16 12:00:40
2 [71 40348270 6 win888e 6 1 N 127.0.0.1]
2017-08-16 12:00:40
3 [71 129499244 6 win888e 6 1 N 127.0.0.1]
2017-08-16 12:00:40
4 [71 40348270 6 win888e 6 1 N 127.0.0.1]
2017-08-16 12:00:40
5 [71 40348270 6 win888e 6 1 N 127.0.0.1]
2017-08-16 12:00:40
Any suggestions or tips will helps. Thanks.