浅谈Go与习题(二十二)

91 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 12 天,点击查看活动详情

今天来学习下Go常见的习题问题(二十二),也是面试中可能会遇到的,让我们来一起学习吧~

多重赋值

观察下列代码,判断输出结果是什么?

func main() {
    var k = 1
    var s = []int{1, 2}
    k, s[k] = 0, 5
    fmt.Println(s[0] + s[1])
}

参考答案:输出结果为6,这里的知识点涉及到多重赋值的概念,多重赋值分为两个步骤,是分先后顺序,第一步需要计算等号左边索引表达式取址表达式,下一步再计算等号右边的表达式,所以在上述代码中,会先计算 s[k]的值,等号右边是两个表达式是常量,所以赋值操作就可以替换成k, s[1] = 0, 5,所以最后输出结果为6

nil覆盖

观察下列代码,判断是否可以通过编译?为什么?

func main() {
    nil := 111
    fmt.Println(nil)
    var _ map[string]int = nil
}

参考答案:不能通过编译,错误信息为:cannot use nil (variable of type int) as map[string]int value in variable declaration,因为预定义的nil被重新赋值,此时的nil变为int类型,不能给map进行赋值操作,所以发生错误

nil预标识符

观察下列选项中,哪个说法是正确的?为什么?

  • A. 类型可以声明的函数体内
  • B. Go 语言支持 ++i 或者 –i 操作
  • C. nil 是关键字
  • D. 匿名函数可以直接赋值给一个变量或者直接执行

参考答案:AD是正确选项,选项B中Go是不支持++i、--i的操作,但是可以使用i++、i--,选项C中,在Go语言中nil是一个预声明的标识符,预声明的nil标识符可以表示很多种类型的零值,分为以下这些种类的类型的零值:

  • 指针类型(包括类型安全和非类型安全指针)
  • 映射类型
  • 切片类型
  • 函数类型
  • 通道类型
  • 接口类型

总结

今天浅谈了Go的习题(二十二),主要介绍了GO面试中会出现的问题,接下来会继续分享其他的习题的相关知识,对于一个刚入门的我来说,还有许多地方需要学习,有错误的地方欢迎大家指出,共同进步!!