开启掘金成长之旅!这是我参与「掘金日新计划 · 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面试中会出现的问题,接下来会继续分享其他的习题的相关知识,对于一个刚入门的我来说,还有许多地方需要学习,有错误的地方欢迎大家指出,共同进步!!