golang 面试题

诺唯 ·
第九题答案, 用 https://studygolang.com/articles/11003 的补充代码也是有问题的. 试试把 th:=threadSafeSet{ s:[]interface{}{&#34;1&#34;,&#34;2&#34;}, } 改成 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, 那数据到底发给谁, 就是未定义的了. <a href="/user/polaris" title="@polaris">@polaris</a> 您觉得呢
#27
更多评论
问题8真没发现什么问题啊?
#1
Set 加锁了,Get 也得加锁。这里最好使用 sync.RWMutex
#2