zoukankan      html  css  js  c++  java
  • 浅谈Go中的time.After

    go的一条哲学是

    不要通过共享来实现通信,而是通信来实现共享

    多协程之间通过 channel 来实现通信,而普遍会遇到的问题是,如何进行超时控制,资料一查询,需要配置selecttime.After一起使用,一开始我以为是整体的超时时间,后面经过下面的这番时间,发现并不是

    
    func main(){
    	c := make(chan int)
    	fmt.Println(time.Now())
    	go func(){
    		time.Sleep(500*time.Millsecond)
    		c <- 0
    		time.Sleep(500*time.Millsecond)
    		c <- 1
    	}()
    	
    	for {
    		select {
    		case p := <- c:
    			fmt.Printf("p=%d
    ",c)
    		case <-time.After(1*time.Second):
    			fmt.Println(time.Now())
    			fmt.Printf("timeout")
    			return
    		}
    	}
    }
    

    执行的结果是

    设置的超时时间是1s,而timeout的时间点是开始执行的2s后

    其实这代表每次从通道中获取数据的超时时间,如果又有新的数据输入,那么时间会重新计时

  • 相关阅读:
    jsp tag
    加密算法
    webpack4.x 使用
    vue部分知识点
    数据赋值处理
    Promise markdown版
    Promise-github版
    vuex简单介绍-官网
    vue-router-官网
    vue官方实例-分例-14-19
  • 原文地址:https://www.cnblogs.com/westlin/p/11232766.html
Copyright © 2011-2022 走看看