Go 面试每天一篇(第 36 天)

 

十一长假已经结束,收拾心情准备进入工作状态。

一起来看下上篇文章题目的解析:

1.关于 bool 变量 b 的赋值,下面错误的用法是?

  • A. b = true

  • B. b = 1

  • C. b = bool(1)

  • D. b = (1 == 2)

参考答案及解析:BC。

2.关于变量的自增和自减操作,下面语句正确的是?

A.
i := 1
i++

B.
i := 1
j = i++

C.
i := 1
++i

D.
i := 1
i--

参考答案及解析:AD。知识点:自增自减操作。i++ 和 i-- 在 Go 语言中是语句,不是表达式,因此不能赋值给另外的变量。此外没有 ++i 和 --i。

3.关于GetPodAction定义,下面赋值正确的是

type Fragment interface {
        Exec(transInfo *TransInfo) error
}
type GetPodAction struct {
}
func (g GetPodAction) Exec(transInfo *TransInfo) error {
        ...
        return nil
}
  • A. var fragment Fragment = new(GetPodAction)

  • B. var fragment Fragment = GetPodAction

  • C. var fragment Fragment = &GetPodAction{}

  • D. var fragment Fragment = GetPodAction{}

参考答案及解析:ACD。

解析若有不妥之处,欢迎在留言区交流、指正!

看下今天的题目:
1.关于函数声明,下面语法正确的是?

  • A. func f(a, b int) (value int, err error)

  • B. func f(a int, b int) (value int, err error)

  • C. func f(a, b int) (value int, error)

  • D. func f(a int, b int) (int, int, error)

2.关于整型切片的初始化,下面正确的是?

  • A. s := make([]int)

  • B. s := make([]int, 0)

  • C. s := make([]int, 5, 10)

  • D. s := []int{1, 2, 3, 4, 5}

3.下面代码会触发异常吗?请说明。

func main() {
    runtime.GOMAXPROCS(1)
    int_chan := make(chan int, 1)
    string_chan := make(chan string, 1)
    int_chan <- 1
    string_chan <- "hello"
    select {
    case value := <-int_chan:
        fmt.Println(value)
    case value := <-string_chan:
        panic(value)
    }
}

 

答案以及解析会在下一篇文章中给出,鼓励大家在留言区留下答案,抱团学习,日拱一卒,每天进步一点!

 

所有学习上的成功,都只依靠两件事 -- 策略和坚持,而坚持本身就是最重要的策略!

 

推荐阅读:

Go 并发 -- Select

教女朋友写方法(续)

5 年 Gopher 都不知道的 defer 细节,你别再掉进坑里!

 

如果我的文章对你有所帮助,点赞、转发都是一种支持!

Go 面试每天一篇(第 36 天)

Go 面试每天一篇(第 36 天)

Go 面试每天一篇(第 36 天)

 

上一篇:go 学习 (五):goroutine 协程


下一篇:如何 优雅的关闭 channel