下面这段代码输出什么以及原因?

func hello() []string {  
    return nil
}

func main() {  
    h := hello
    if h == nil {
        fmt.Println("nil")
    } else {
        fmt.Println("not nil")
    }
}

A. nil B. not nil C. compilation error

B。这道题目里面,是将函数 hello 赋值给变量 h,而不是函数的返回值(即不是进行函数调用),所以输出 not nil。注意 Go 中函数是一等公民。

如果修改为

func hello() []string {  
    return nil
}

func main() {  
    h := hello()
    if h == nil {
        fmt.Println("nil")
    } else {
        fmt.Println("not nil")
    }
}

答案才能为A