golang日記
来源:互联网 发布:深圳市国税开票软件 编辑:程序博客网 时间:2024/05/29 14:55
The Go Programming Language书的5.6节匿名函数中,有以下代码
func squares() func() int { var x int return func() int { x++ return x * x }}func main() { f := squares() fmt.Println(f()) // "1" fmt.Println(f()) // "4" fmt.Println(f()) // "9" fmt.Println(f()) // "16"}
先分析一下这段代码
函数func squares() func() int { … }
return func() int {…}
这两个部分, 重复的是 func() int{}, 所以我们可以猜测, 这起到链接的作用. 那么这段代码分析下来. squares()返回类型func()匿名函数, 使用func()匿名函数后, 返回类型int.
这里出现的问题, 类型名该不该含有 括号()?
假设是需要括号, 那么上面代码就变成
f() := squares()
这样的话导致的问题
1. 函数和数据的界限就变得不清晰, 这会导致看代码人不知道实质调用了几次函数
2. 代码变得不简洁, 如果我们要重复调用 squares()的匿名函数, 这就要多加一些字符, 如f().()
函数可以当作类型返回, 这让golang的函数变得和Java中的构造函数的表达方式有点像,
Java类=>Golang函数
Java构造函数=>Golang可无数次调用的匿名函数
阅读全文
1 0
- golang日記
- golang日記
- golang日記
- golang日記
- golang日記
- golang日記
- golang日記 -Java的ArrayList和Golang的slice
- golang日記ーsprint有什么用? 和+号的区别
- golang 1.5 预计 8 月11 日发布
- Golang
- golang
- golang
- golang
- golang
- GOLANG
- golang
- golang
- golang
- harbor-offline-installer-v1.1.1.tgz 下载地址
- HBase scan setBatch和setCaching的区别
- Linux搭建SVN服务器及服务端代码自动更新
- Spark Streaming+kafka订单实时统计实现
- 机房重构—注册
- golang日記
- linux 读写锁的几种实现方式
- Revit二次开发之创建共享参数及绑定共享参数【比目鱼原创】
- POJ-3735 Training little cats
- 图片缩放
- 编程之美 2.4 “1”的数目及扩展问题
- 机器学习算法~推荐系统
- 16 Quantized Convolutional Neural Networks for Mobile Devices论文翻译笔记
- Core Animation 基础