Go的channel不强求写入方式

90 阅读1分钟
package main

import (
	"fmt"
	"time"
)

func main() {
	ch := make(chan string, 10)

	go gen(ch, 0)
	go gen(ch, 100)
	go func() {
		for {
			v := <-ch
			fmt.Println(v)
		}
	}()
	time.Sleep(10 * time.Second)
}

func gen(ch chan string, start int) {
	for i := 0 + start; i < 10+start; i++ {
		select {
		case ch <- fmt.Sprintf("%d", i):
			// time.Sleep(100)
		default:
			fmt.Println("...")
		}
	}
}

# result1:
go run main.go
...
...
...
...
...
...
0
1
2
3
4
5
6
7
8
9
100
...
108
109



#result2:
go run main.go
0
1
2
3
4
5
6
7
8
9
100
101
102
103
104
105
106
107
...
109