跟着猫哥学Golang[8] - 函数
所有编程语言都有函数的概念。Golang里面,函数有些特殊。
1. 首先,函数也是值。
函数可以拿来当参数,当变量,当... 这些猫哥第一遇到的时候是在JavaScript里。没想到在Golang里又遇到了。感觉Go借鉴了C,借鉴了JavaScript,然而是一种脚本语言。抑或无名函数类似Python中的 lamda?
来看个例子:
package mainimport "fmt"func main() {myarea := func(x, y float32) float32 {return (x*y)}fmt.Println(myarea(1.1, 2.2))
}// 输出:
2.42
必须说明的两点:
1) Golang没有float类型,或者float32 或者 float64,只能二选一。
2)如果例子里的类型换成float64,那么结果会是很诡异的 2.4200000000000004 。猫哥在 go1.5.1 windows/amd64上实验的结果。末尾的4不知道怎么出来的。
2. 函数是完全闭包的。
来看一个精心构造的例子(参考了《Go语言半小时速成教程》的一段代码):
package mainimport "fmt"func adder() func(int) int {sum := 1return func(x int) int {sum *= xreturn sum}
}func main() {pos, neg := adder(), adder()for i:=1; i<5; i++ {fmt.Println(pos(i),neg(-1*i),)}
}// 输出结果:
1 -1
2 2
6 -6
24 24
两个函数的执行互不影响,完全各干各的。
3. golang函数可以有多个返回值。
这一点应该是足以让C语言程序员们羡慕不已的了,Perl程序员们笑而不语路过...
第一个例子的小小变形:
package mainimport "fmt"func myfunc (x, y int) (circle, area int) {return (x+y)*2, x*y
}func main() {mylength, myarea := myfunc(4, 6)fmt.Println(mylength)fmt.Println(myarea)
}//输出:
20
24
4. 函数的作用当然远远不止于此,还记得之前谈到过的结构体(struct)吗?Golang让结构体和函数配合,产生了新的功能。当然了,和结构体配合,函数就不再叫函数,而改成——方法(method)。后面会讲到的。
func variousPara(paras ... interface{}) {fmt.Println(paras)fmt.Println(reflect.TypeOf(paras))
}
跟着猫哥学Golang[8] - 函数相关推荐
- 跟着猫哥学Golang[1] - Hello World!
Go是Google开发的一种编译型,可平行化,并具有垃圾回收功能的编程语言.为了避免歧义,也可以写作 golang. 学什么语言,首先要来个Hello world. 来吧,Golang版的 pa ...
- 跟着鸟哥学Linux系列笔记1
跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 装完linux之后,接下来一步就是进行相关命令的学习了 第五章:首次登录与在线求助man page 1. X ...
- 『跟着雨哥学AI』系列之八:趣味案例——有关NLP任务数据预处理的那些事儿...
点击左上方蓝字关注我们 课程简介: "跟着雨哥学AI"是百度飞桨开源框架近期针对高层API推出的系列课.本课程由多位资深飞桨工程师精心打造,不仅提供了从数据处理.到模型组网.模型训 ...
- 『跟着雨哥学AI』系列之七:趣味案例——动手制作专属证件照
点击左上方蓝字关注我们 课程简介: "跟着雨哥学AI"是百度飞桨开源框架近期针对高层API推出的系列课.本课程由多位资深飞桨工程师精心打造,不仅提供了从数据处理.到模型组网.模型训 ...
- 『跟着雨哥学AI』系列之六:趣味案例——基于U-Net的宠物图像分割
点击左上方蓝字关注我们 课程简介: "跟着雨哥学AI"是百度飞桨开源框架近期针对高层API推出的系列课.本课程由多位资深飞桨工程师精心打造,不仅提供了从数据处理.到模型组网.模型训 ...
- 跟着鬼哥学爬虫-10-python微信-5-加上了人工智能回复!
跟着鬼哥学爬虫-10-python微信-5-加上了人工智能回复! 其实人工智能回复,现在网上有很多开源的机器学习,AI学习的框架,但是最重要的一点就是没有语料,也就是没有相互回答的数据内容. 所以这个 ...
- 阿里短信发送(跟着宝哥学java)
1 短信发送 1.1 注册阿里云 1.2 查找短信服务:创建签名 1.3 创建模板 1.4 获取accessKey和accesssKeySecret 1.5 项目中引入依赖 <!--短信发送的依 ...
- 跟着鬼哥学爬虫-5-更新妹子图库质量,提高微信群聊发图速度
跟着鬼哥学爬虫-5-更新妹子图库质量,提高微信群聊发图速度 第三篇中的图库,群里大家都说质量稍微次一点,现在重新爬了个网站更新一下. 比上一篇的代码也优化了一点,对于自动保存的文件名,采用数字方式直接 ...
- 跟着鸟哥学linux【一】
今天开始跟着鸟哥学习linux了,这组博客将会成为我跟着鸟哥学习linux的笔记和心得. 虚拟机这个东西之前已经接触过了,环境也配置好了. ctrl+alt+(f1-f9)是切换不同的tty,什么是t ...
- 跟着迪哥学python 经管之家_跟着迪哥学Python数据分析与机器学习实战
本书结合了机器学习.数据分析和Python语言,通过案例以通俗易懂的方式讲解了如何将算法应用到实际任务. 全书共20章,大致分为4个部分.第一部分介绍了Python的工具包,包括科学计算库Numpy. ...
最新文章
- 祝福互动html页面,祝福.html
- Spring Boot 2.0 热部署指南
- 在Delphi程序中操作注册表
- 为Feign设置Header信息
- MySQL不能插入中文字符及中文字符乱码问题
- 讨论计算机在学术领域的应用,BGPLUS实地科研 | 卡内基梅隆大学 | 计算机、人工智能:在科学实验领域的应用...
- 【Tiny4412】 Tiny4412开发环境搭建
- LinQ高级查询、组合查询
- Hive的安装-Hive配置
- leetcode 303. 区域和检索 - 数组不可变(Java版)
- 猴子吃桃问题(南阳ACM324)
- 互联网短平快下,DevCloud如何支撑软件开发的“转型”?
- 远程桌面服务器无法复制粘贴了怎么解决
- centos7安装打印机 cups页面管理 java程序驱动打印程序
- 服务器正文21:不同编译器对预编译的处理(简单介绍msvc和gcc)及常用gcc编译指令、跨平台debug、release不同指令flag选择
- 我的XBox手柄怎么有线断连了
- mysql求学号的总分_有一个student表,有学号,姓名,科目,成绩等字段,请写一条sql语句,算出学生的总分数?...
- c语言汉诺塔实验报告,C语言汉诺塔的简单了解
- 注册表备份和恢复(转)
- 获取商品历史价格信息api