go import 指定分支_Go语言的那些坑二

热烈欢迎你,相识是一种缘分,Echa 哥为了你的到来特意准备了一份惊喜,go学习资料《「转」go 语言实战笔记教程系列大纲汇总-值得收藏》

目录:

Go语言的那些坑

ea9134e8eed16b4986338d5541e4a54c.png

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)}

答案:

可以正常编译通过。

稍作改动,改为如下的情况,还能编译通过吗?

import ("fmt")func main(){array := make(map[func ()int]int)array[func()int{return 12}] = 10fmt.Println(array)}

答案:

不能编译通过。

在Go语言中,函数被看做是第一类值:(first-class values):函数和其他值一样,可以被赋值,可以传递给函数,可以从函数返回。也可以被当做是一种“函数类型”。例如:有函数func square(n int) int { return n * n },那么就可以赋值f := square,而且还可以fmt.Println(f(3))(将打印出“9”)。Go语言函数有两点很特别:

  • 函数值类型不能作为map的key
  • 函数值之间不可以比较,函数值只可以和nil作比较,函数类型的零值是nil

匿名函数作用域陷阱

请看下列代码输出什么?

import ("fmt")func main(){var msgs []func()array := []string{"1", "2", "3", "4",}for _, e := range array{msgs = append(msgs, func(){fmt.Println(e)})}for _
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值