Go专家编程-管道热身测验

题目1

下面关于管道的描述正确的是(单选)?

A:读nil管道会触发panic

B:写nil管道会触发panic

C:读关闭管道会触发panic

D:写关闭的管道会触发panic

参考答案:

读写nil管道均会发生阻塞。关闭的管道仍然可以读取数据,如果管道还存在数据就正常读取,否则就会读取到该类型的零值。向关闭的管道写数据会触发panic。本题选D。


题目2

下面的函数输出什么?

func ChanCap() {
	ch := make(chan int, 10)
	ch <- 1
	ch <- 2
	fmt.Println(len(ch))
	fmt.Println(cap(ch))
}

参考答案:

内置函数len()和cap()分别用于查询管道缓存中数据的个数及缓存的大小。

运行结果:2 10


题目3

以下选项可以实现互斥锁的是(单选)?

A:

var counter int = 0
var ch = make(chan int, 1)

func Worker() {
	ch <- 1
	counter++
	<- ch
}

B:

var counter int = 0
var ch = make(chan int)

func Worker() {
	ch <- 1
	counter++
	<- ch
}

C:

var counter int = 0
var ch = make(chan int, 1)

func Worker() {
	<- ch
	counter++
	ch <- 1
}

D:

var counter int = 0
var ch = make(chan int)

func Worker() {
	ch <- 1
	counter++
	<- ch
}

参考答案:

只有一个缓冲区的管道写入数据类似于加锁,读出数据类似于解锁。本体选A

选项B、D为无缓冲区管道,读写都会阻塞,选项C先读取数据,会发生阻塞。

上一篇:第十五章 并发版爬虫第二版 -- 完结


下一篇:golang学习笔记——select