Go面试题47

Posted by     "" on Monday, January 13, 2020

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. 知识点: 变量隐藏. 使用变量简短声明符号:= 时, 如果符号左边有多个变量, 只需要保证至少有一个变量是新声明的, 并对已定义的变量尽量进行赋值操作. 但如果出现作用域后, 就会导致变量隐藏的问题, 就像这个例子一样.

「真诚赞赏,手留余香」

Richie Time

真诚赞赏,手留余香

使用微信扫描二维码完成支付