函数赋值给变量

题目:

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

1
2
3
4
5
6
7
8
9
10
11
12
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。

​ 在Go语言中,函数变量可以存储函数的地址。在 main 函数中,变量 h 被赋值为 hello 函数的地址。即使 hello 函数返回了一个空切片 nil,它仍然被认为不是 nil。因此,条件 h == nil 不满足,程序会执行 else 分支,输出 “not nil”。

以下解析来自Go语言中文网

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


函数赋值给变量
http://example.com/2023/06/03/Go每日一题/函数赋值给变量/
作者
Feng Tao
发布于
2023年6月3日
更新于
2023年6月3日
许可协议