Go面试题47
1: 下面的代码有什么问题?
func main() {
data := []int{1,2,3}
i := 0
++i
fmt.Println(data[i++])
}
2: 下面代码最后一行输出什么? 请说明原因.
func main() {
x := 1
fmt.Println(x)
{
fmt.Println(x)
i, x := 2, 2
fmt.Println(i, x)
}
fmt.Println(x) // print ?
}
参考答案及解析
1: 答案及解析: 对于自增, 自减, 需要注意:
自增, 自减不在是运算符, 只能作为独立语句, 而不是表达式; 不想其他语言, Go 语言中不支持
++i
和--i
操作;
表达式通常是求值代码, 可作为右值或者参数使用. 而语句 表示完成一个任务, 比如if
,for
语句等. 表达式可作为语句使用, 但是语句不能当做表示式. 修复代码如下:
func main() {
data := []int{1,2,3}
i := 0
i++
fmt.Println(data[i])
}
2: 答案及解析: 输出1
. 知识点: 变量隐藏. 使用变量简短声明符号:=
时, 如果符号左边有多个变量, 只需要保证至少有一个变量是新声明的, 并对已定义的变量尽量进行赋值操作. 但如果出现作用域后, 就会导致变量隐藏的问题, 就像这个例子一样.
「真诚赞赏,手留余香」
真诚赞赏,手留余香
使用微信扫描二维码完成支付