golang 实现goroutine顺序输出
原理:waitgroup 保证协程阻塞,执行完毕。chan是有序的(先进先出)保证循序执行。
func main() {
str := make([]string, 0)
//str1 := make([]string, 0)
str = append(str, "1")
str = append(str, "2")
str = append(str, "3")
str = append(str, "4")
str = append(str, "5")
wg := sync.WaitGroup{}
result := make(map[int]string)
sli := make([]int, 0)
for i, c := range str {
sli = append(sli, i)
ch := make(chan string)
wg.Add(1)
go func(ch <-chan string, index int, res map[int]string) {
key := <-ch
//fmt.Println(key)
//str1 = append(str1, key)
res[index] = key
wg.Done()
}(ch, i, result)
ch <- c
}
wg.Wait()
for i := range sli {
fmt.Println(result[i])
}