golang代码 最快回应
func source(c chan<- int32) { ra, rb := rand.Int31(), rand.Intn(3) + 1 time.Sleep(time.Duration(rb) * time.Second) // 睡眠1~3秒 c <- ra } func main() { rand.Seed(time.Now().UnixNano()) c := make(chan int32, 5) // 必须用一个缓冲通道 for i := 0; i < cap(c); i++ { // 通道容量和goroutine一样多 go source(c) } rnd := <- c // 只有第一个回应被使用了 fmt.Println(rnd) } -------------------------------------------------------------------------------- func source(c chan<- int32) { ra, rb := rand.Int31(), rand.Intn(3)+1 time.Sleep(time.Duration(rb) * time.Second) select { case c <- ra: default: // 非阻塞 } } func main() { rand.Seed(time.Now().UnixNano()) c := make(chan int32, 1) // 通道容量比goroutine数量少 for i := 0; i < 5; i++ { go source(c) } rnd := <-c fmt.Println(rnd) }