- 面试题
- 第一天
- 第二天
- 第三天
- 第四天
- 第五天
- 第六天
- 第七天
- 第八天
- 第九天
- 第十天
- 第十一天
- 第十二天
- 第十三天
- 第十四天
- 第十五天
- 第十六天
- 第十七天
- 第十八天
- 第十九天
- 第二十天
- 第二十一天
- 第二十二天
- 第二十三天
- 第二十四天
- 第二十五天
- 第二十六天
- 第二十七天
- 第二十八天
- 第二十九天
- 第三十天
- 第三十一天
- 第三十二天
- 第三十三天
- 第三十四天
- 第三十五天
- 第三十六天
- 第三十七天
- 第三十八天
- 第三十九天
- 第四十天
- 第四十一天
- 第四十二天
- 第四十三天
- 第四十四天
- 第四十五天
- 第四十六天
- 第四十七天
- 第四十八天
- 第四十九天
- 第五十天
- 第五十一天
- 第五十二天
- 第五十三天
- 第五十四天
- 第五十五天
- 第五十六天
- 第五十七天
- 第五十八天
- 第五十九天
- 第六十天
- 第六十一天
- 第六十二天
- 第六十三天
- 第六十四天
- 第六十五天
- 第六十六天
- 第六十七天
- 第六十八天
- 第六十九天
- 第七十天
- 第七十一天
- 第七十二天
- 第七十三天
- 第七十四天
- 第七十五天
- 第七十六天
- 第七十七天
- 第七十八天
- 第七十九天
- 第八十天
- 第八十一天
- 第八十二天
- 第八十三天
- 第八十四天
- 第八十五天
- 第八十六天
- 第八十七天
- 第八十八天
- 第八十九天
- 第九十天
- 第九十一天
- 第九十二天
- 第九十三天
- 第九十四天
- 第九十五天
- 第九十六天
- 第九十七天
- 第九十八天
- 第九十九天
- 第一百天
- 第一百零一天
- 第一百零二天
- 第一百零三天
- 第一百零四天
- 第一百零五天
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
第三十九天
1.关于无缓冲和有冲突的channel,下面说法正确的是?
A. 无缓冲的channel是默认的缓冲为1的channel;
B. 无缓冲的channel和有缓冲的channel都是同步的;
C. 无缓冲的channel和有缓冲的channel都是非同步的;
D. 无缓冲的channel是同步的,而有缓冲的channel是非同步的;
参考答案及解析:D。
2.下面代码是否能编译通过?如果通过,输出什么?
func Foo(x interface{}) {
if x == nil {
fmt.Println("empty interface")
return
}
fmt.Println("non-empty interface")
}
func main() {
var x *int = nil
Foo(x)
}
参考答案及解析:non-empty interface 考点:interface 的内部结构,我们知道接口除了有静态类型,还有动态类型和动态值,当且仅当动态值和动态类型都为 nil 时,接口类型值才为 nil。这里的 x 的动态类型是 *int
,所以 x 不为 nil。
3.下面代码输出什么?
func main() {
ch := make(chan int, 100)
// A
go func() {
for i := 0; i < 10; i++ {
ch <- i
}
}()
// B
go func() {
for {
a, ok := <-ch
if !ok {
fmt.Println("close")
return
}
fmt.Println("a: ", a)
}
}()
close(ch)
fmt.Println("ok")
time.Sleep(time.Second * 10)
}
参考答案及解析:程序抛异常。先定义下,第一个协程为 A 协程,第二个协程为 B 协程;当 A 协程还没起时,主协程已经将 channel 关闭了,当 A 协程往关闭的 channel 发送数据时会 panic,panic: send on closed channel。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论