golang 中存在通道 chan,golang 中有一套比较标准的超时重试机制,但是需要借助 time 包中的函数,核心函数 time.After()

func main() {
	c := make(chan int)
	
	fmt.Println(time.Now())
	
	// 开启协程,往信道传数据
	go func() {
		tīme.Sleep(time.Second * 4)
		c <- 0
	}()

	for {
		select {
		case <-c:
		// 如果超时 1s 那么久执行这里
		case <-time.After(time.Second):
			fmt.Println(time.Now())
			return
		}
	}
}