初级会员
  • 第 11252 位会员
  • georgetso
  • George
  • 2017-08-18 06:45:54
  • Offline
  • 13

最近发布的文章

    暂无

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • 评论了博文 golang 面试题
    第九题答案, 用 https://studygolang.com/articles/11003 的补充代码也是有问题的. 试试把 th:=threadSafeSet{ s:[]interface{}{"1","2"}, } 改成 th:=threadSafeSet{ s:[]interface{}{1,2,3,4,5,6,7,8,9}, } 你会发现, 并不是所有内容都可以打印出来, 因为 main 函数结束得很快. 我认为第九题的问题, 或者说可能的隐患, 可能在于 Iter() 函数每次都返回不同的 channel. 这可能是故意如此设计, 也可能是某个隐患, 主要还是要看作者的意图. 试想: 如果 set.s 并不是一个 array, 而是一个 chan, 那 range set.s 就有阻塞的可能性(阻塞不是问题). 因为 threadSafeSet 顾名思义就是分享给多个调用者共同使用的, 于是就出现了多个调用者都在 range set.s, 那数据到底发给谁, 就是未定义的了. @polaris 您觉得呢
  • 楼上说得对. C++中分配在栈上的内存当然不能这样写, 但是 go compiler 会分析你分配在栈上的方式是不是合适的, 如果不合适它会帮你分配到堆上.
  • 联系方式也没有
  • for-select style: ```` package main import ( "fmt" "time" ) var c = make(chan int, 5) func main() { go func() { for index := 0; index < 10; index++ { time.Sleep(time.Millisecond * 200) c <- index } close(c) }() loop: for { select { case i, ok := <-c: if ok { fmt.Println(i) } else { break loop } } } } ````
  • vscode