本文即Go语言的那些坑二。
Golang中函数被看做是值,函数值不可以比较,也不可以作为map的key
请问以下代码能编译通过吗?
import (
"fmt"
)
func main(){
array := make(map[int]func ()int)
array[func()int{ return 10}()] = func()int{
return 12
}
fmt.Println(array)
}```
**答案:**
可以正常编译通过。
稍作改动,改为如下的情况,还能编译通过吗?
```Go
import (
"fmt"
)
func main(){
array := make(map[func ()int]int)
array[func()int{return 12}] = 10
fmt.Println(array)
}
答案
不能编译通过。
在Go语言中,函数被看做是第一类值:(first-class values):函数和其他值一样,可以被赋值,可以传递给函数,可以从函数返回。也可以被当做是一种“函数类型”。例如:有函数func square(n int) int { return n * n }
,那么就可以赋值f := squa