点击上方蓝色“Golang来啦”关注我哟
加个“星标”,天天 15 分钟,一起学 Go
你好哇,欢迎来答题,一起来看下
1.关于无缓冲和有冲突的channel,下面说法正确的是?
A. 无缓冲的channel是默认的缓冲为1的channel;
B. 无缓冲的channel和有缓冲的channel都是同步的;
C. 无缓冲的channel和有缓冲的channel都是非同步的;
D. 无缓冲的channel是同步的,而有缓冲的channel是非同步的;
参考答案及解析:D。参考文章《
2.下面代码是否能编译通过?如果通过,输出什么?
1func Foo(x interface{}) {
2 if x == nil {
3 fmt.Println("empty interface")
4 return
5 }
6 fmt.Println("non-empty interface")
7}
8func main() {
9 var x *int = nil
10 Foo(x)
11}
参考答案及解析:non-empty interface
考点:interface 的内部结构,我们知道接口除了有静态类型,还有动态类型和动态值,当且仅当动态值和动态类型都为 nil 时,接口类型值才为 nil。这里的 x 的动态类型是 *int
,所以 x 不为 nil。
3.下面代码输出什么?
1func main() {
2 ch := make(chan int, 100)
3 // A
4 go func() {
5 for i := 0; i < 10; i++ {
6 ch <- i
7 }
8 }()
9 // B
10 go func() {
11 for {
12 a, ok := <-ch
13 if !ok {
14 fmt.Println("close")
15 return
16 }
17 fmt.Println("a: ", a)
18 }
19 }()
20 close(ch)
21 fmt.Println("ok")
22 time.Sleep(time.Second * 10)
23}
参考答案及解析:程序抛异常。先定义下,第一个协程为 A 协程,第二个协程为 B 协程;当 A 协程还没起时,主协程已经将 channel 关闭了,当 A 协程往关闭的 channel 发送数据时会 panic,panic: send on closed channel
。
解析若有不妥之处,欢迎在留言区交流、指正!
看下今天的题目:
A. select机制用来处理异步IO问题;
B. select机制最大的一条限制就是每个case语句里必须是一个IO操作;
C. golang在语言级别支持select关键字;
D. select关键字的用法与switch语句非常类似,后面要带判断条件;
2.下面的代码有什么问题?
1func Stop(stop <-chan bool) {
2 close(stop)
3}
3.下面这段代码存在什么问题?
答案以及解析会在下一篇文章中给出,鼓励大家在留言区留下答案,抱团学习,日拱一卒,每天进步一点!
ps:看完文章如果有收获,顺手花 1s 时间帮点下文末右下方的「在看」,感激!
所有学习上的成功,都只依靠两件事 -- 策略和坚持,而坚持本身就是最重要的策略!
推荐阅读:
如果我的文章对你有所帮助,点赞、转发都是一种支持!