初级会员
  • 第 2591 位会员
  • justay
  • justay@foxmail.com
  • 2015-03-27 01:12:21
  • Offline
  • 21 58

最近发布的文章

    暂无

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • 点赞!👍
  • 超时一般不是这么写么 ```golang select { case t:=<-c: // do something case <-time.After(time.Second*10): // time out } ``` 你这个怎么是用timer来做的?t.Reset 无论哪个版本都是非线程安全的。
  • 并发的情况下,需要!
  • #2 @pssgo 利用`select`对`chan`进行操作是随机选取`chan`的。无论是往里面写数据或是读数据。 ```golang for i:= 1; i < 4; i++ { select { case ch1 <- i: case ch2 <- i: } } ``` 这段会导致ch1,ch2里面的内容[1,2,3]是随机分布的。 ```golang select { case v, ok = <- ch1: s = "a" case v, ok = <- ch2: s = "b" } ``` 这段读的顺序也是随机的,随机从`ch1`,`ch2`里读取数据。想判断的话不要用同一个变量, 分别用不同的`ok`变量则可以避免你的问题.
  • ```golang v,ok=<-chan ``` 这里的`ok`是说`c`是否关闭,因为关闭之后从chan种读取数据会立即返回。 ```golang c:=make(chan int,2) v,ok:=<-c // 阻塞,等待从c中读取数据 // 关闭chan close(c) v,ok:=<-c //不会阻塞,立即返回,如果此次从chan中读取到了值,则ok为true,否则为false且v为零值 ```