浅谈Go与习题(十七)

174 阅读2分钟

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

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

变量声明

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

func main() {
	one := 2
	one := 3
	fmt.Print(one)
}

参考答案:不能通过编译,因为变量one重复声明,不能重复声明同一个变量,但是可以多变量声明,并且保证左边的变量至少有一个是没有被声明过的,修改的代码如下所示:

func main() {
	one := 2
	one,two := 3,4
	fmt.Print(one,two)
}

切片声明

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

func main() {
	var x string = nil 
	y := []int{
		1,
		2
	}
	fmt.Println(y)
}

参考答案:不能通过编译,首先第一个错误是变量y不能初始化为nil类型,string类型的初始化默认是"",其次初始化切片的时候,使用字面量初始化数字,slice或者map的时候,可以在每个元素后面加上逗号,即便是多行或者一行声明都不会出错,修改代码如下:

func main() {
	var x string 
	y := []int{ //多行
		1,
		2,
	}
        z := []int{2,3,} //一行初始化
	fmt.Println(y)
}

语句 表达式

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

func main() {
    data := []int{1,2,3}
    i := 0
    ++i
    fmt.Println(data[i++])
}

参考答案:不能通过编译,原因有2点如下:

  1. 首先++i 或者--i在Go语音中是不支持的,其他语音可以支持
  2. 其次自增、自减操作在Go语言中不是表达式,不能在data[i++]中直接使用,只能作为独立语句

值得注意的是,表达式只表示一个值,即称为单值表达式,并且在Go语言中的函数调用能返回两个或两个以上的值,这样的函数调用可被称为多值表达式,像无赋值部分的信道接收运算<-ch也是表达式,也可能是单值的或多值的

其次,Go语言中的语句包括:声明语句、标签语句、简单语句、go 语句、return 语句、break 语句、continue 语句goto 语句、fallthrough 语句、if 语句、switch 语句、select 语句、for 语句、defer 语句等

总结

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