专业的编程技术博客社区

网站首页 > 博客文章 正文

Go语言——select热身题目自测(go语言热度)

baijin 2024-10-03 17:26:25 博客文章 5 ℃ 0 评论

跟着小火柴,我们接着来练习Go语言重的select。select是Go在语言层面提供的多路I/O复用机制,用于检测多个管道是否就绪(即可读或可写),其特性与管道息息相关。接下来看两道select自测题目。

题目一:下面的函数输出什么(单选)?

func SelectExam1() {
      c1 := make(chan int, 10)
      c2 := make(chan int, 10)
      c1 <- 1
      c2 <- 2

      select {
      case <-c1:
               fmt.Println("c1")
case <-c2:
               fmt.Println("c2")
        }
}

A:函数输出c1。

B:函数输出c2。

C:函数输出c1、c2。

D:函数可能输出c1,也可能输出c2。

答案:本题答案为D。题目考察select的case语句执行顺序的知识点。题目中的两个管道均可读取,所以select中的两个case语句可读取管道,此时执行顺序是随机的,即函数可能输出c1,也可能输出c2。

题目二:下面的函数输出什么(单选)?

func SelectExam2() {
       c := make(chan int)

       select {
       case <-c:
               fmt.Printf("readable")
       case c <- 1:
                fmt.Println("writable")
        }
}

A:函数输出readable。

B:函数输出writable。

C:函数什么也不输出,正常返回。

D:函数什么也不输出,陷入阻塞。

答案:本题答案为D。题目考察select的case语句执行顺序的知识点。题目中的管道没有缓冲区,所以既不可读也不可写,两个case语句都会阻塞,此时函数会阻塞。


本题选自《Go专家编程(第2版)》第1章

本书内容:本书深入地讲解了 Go 语言常见特性的内部机制和实现方式,大部分内容源自对 Go 源码的分析,并从中提炼出实现原理。通过阅读本书,读者可以快速、轻松地了解 Go 语言的内部运作机制。在结构上采取题目引入-特性分析-原理解析的模式,让读者从实践入手逐步深入原理,由浅入深掌握知识原理。

本书适合:

Go语言程序员;

对Go语言感兴趣的技术人员;

即将进入互联网行业的新手程序员。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表