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

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 是个Function values.函数在GO中时一等公民。因此可以 if h == nil 有应为Function values.有值(地址)因此也不为nil 函数也是值。它们可以像其他值一样传递。 函数值可以用作函数参数和返回值。