Go chan

目录

chan超时控制

go 中实现超时控制的时候, select-case,粗糙地在超时的时候返回而不管尚在执行中的 goroutine 的死活。结果是,大批量调用受到几个调用超时的影响,一直超时无法恢复。

context 可以设置超时处理,解决超时退出下 goroutine 的退出问题。

案例:比如抢购锁的使用

https://ictar.xyz/2018/03/20/如何用go实现超时控制/

生产者消费者

package main

import "fmt"

func Producer(ch chan int) {
	for i := 1; i <= 10; i++ {
		ch <- i
		}
	close(ch)
}

func Consumer( ch chan int, done chan bool) {
	for {
		value, ok := <-ch
		if ok {
			fmt.Printf(" recv: %d\n", value)
			} else {
			fmt.Printf("closed\n")
			break
			}
		}
	done <- true
}

func main() {
	ch := make(chan int)
	done := make(chan bool)
	go Producer(ch)
	go Consumer( ch, done)
	<-done
}
上一篇:golang队列任务处理


下一篇:Go语言 | goroutine不只有基础的用法,还有这些你不知道的操作