所有编程语言都有函数的概念。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)。后面会讲到的。

5. Golang的函数可以接受可变参数的例子,其实最开始就遇到了。
比如: fmt.Println("hello" , "world!")
写出来,看起来这样的:
func variousPara(paras ... interface{}) {fmt.Println(paras)fmt.Println(reflect.TypeOf(paras))
}



跟着猫哥学Golang[8] - 函数相关推荐

  1. 跟着猫哥学Golang[1] - Hello World!

     Go是Google开发的一种编译型,可平行化,并具有垃圾回收功能的编程语言.为了避免歧义,也可以写作 golang. 学什么语言,首先要来个Hello world. 来吧,Golang版的 pa ...

  2. 跟着鸟哥学Linux系列笔记1

    跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 装完linux之后,接下来一步就是进行相关命令的学习了 第五章:首次登录与在线求助man page 1. X ...

  3. 『跟着雨哥学AI』系列之八:趣味案例——有关NLP任务数据预处理的那些事儿...

    点击左上方蓝字关注我们 课程简介: "跟着雨哥学AI"是百度飞桨开源框架近期针对高层API推出的系列课.本课程由多位资深飞桨工程师精心打造,不仅提供了从数据处理.到模型组网.模型训 ...

  4. 『跟着雨哥学AI』系列之七:趣味案例——动手制作专属证件照

    点击左上方蓝字关注我们 课程简介: "跟着雨哥学AI"是百度飞桨开源框架近期针对高层API推出的系列课.本课程由多位资深飞桨工程师精心打造,不仅提供了从数据处理.到模型组网.模型训 ...

  5. 『跟着雨哥学AI』系列之六:趣味案例——基于U-Net的宠物图像分割

    点击左上方蓝字关注我们 课程简介: "跟着雨哥学AI"是百度飞桨开源框架近期针对高层API推出的系列课.本课程由多位资深飞桨工程师精心打造,不仅提供了从数据处理.到模型组网.模型训 ...

  6. 跟着鬼哥学爬虫-10-python微信-5-加上了人工智能回复!

    跟着鬼哥学爬虫-10-python微信-5-加上了人工智能回复! 其实人工智能回复,现在网上有很多开源的机器学习,AI学习的框架,但是最重要的一点就是没有语料,也就是没有相互回答的数据内容. 所以这个 ...

  7. 阿里短信发送(跟着宝哥学java)

    1 短信发送 1.1 注册阿里云 1.2 查找短信服务:创建签名 1.3 创建模板 1.4 获取accessKey和accesssKeySecret 1.5 项目中引入依赖 <!--短信发送的依 ...

  8. 跟着鬼哥学爬虫-5-更新妹子图库质量,提高微信群聊发图速度

    跟着鬼哥学爬虫-5-更新妹子图库质量,提高微信群聊发图速度 第三篇中的图库,群里大家都说质量稍微次一点,现在重新爬了个网站更新一下. 比上一篇的代码也优化了一点,对于自动保存的文件名,采用数字方式直接 ...

  9. 跟着鸟哥学linux【一】

    今天开始跟着鸟哥学习linux了,这组博客将会成为我跟着鸟哥学习linux的笔记和心得. 虚拟机这个东西之前已经接触过了,环境也配置好了. ctrl+alt+(f1-f9)是切换不同的tty,什么是t ...

  10. 跟着迪哥学python 经管之家_跟着迪哥学Python数据分析与机器学习实战

    本书结合了机器学习.数据分析和Python语言,通过案例以通俗易懂的方式讲解了如何将算法应用到实际任务. 全书共20章,大致分为4个部分.第一部分介绍了Python的工具包,包括科学计算库Numpy. ...

最新文章

  1. 祝福互动html页面,祝福.html
  2. Spring Boot 2.0 热部署指南
  3. 在Delphi程序中操作注册表
  4. 为Feign设置Header信息
  5. MySQL不能插入中文字符及中文字符乱码问题
  6. 讨论计算机在学术领域的应用,BGPLUS实地科研 | 卡内基梅隆大学 | 计算机、人工智能:在科学实验领域的应用...
  7. 【Tiny4412】 Tiny4412开发环境搭建
  8. LinQ高级查询、组合查询
  9. Hive的安装-Hive配置
  10. leetcode 303. 区域和检索 - 数组不可变(Java版)
  11. 猴子吃桃问题(南阳ACM324)
  12. 互联网短平快下,DevCloud如何支撑软件开发的“转型”?
  13. 远程桌面服务器无法复制粘贴了怎么解决
  14. centos7安装打印机 cups页面管理 java程序驱动打印程序
  15. 服务器正文21:不同编译器对预编译的处理(简单介绍msvc和gcc)及常用gcc编译指令、跨平台debug、release不同指令flag选择
  16. 我的XBox手柄怎么有线断连了
  17. mysql求学号的总分_有一个student表,有学号,姓名,科目,成绩等字段,请写一条sql语句,算出学生的总分数?...
  18. c语言汉诺塔实验报告,C语言汉诺塔的简单了解
  19. 注册表备份和恢复(转)
  20. 获取商品历史价格信息api

热门文章

  1. 未能联接game center服务器,win10系统GameCenter无法连接服务器的处理步骤
  2. Window7 Chrome 升级提示关闭
  3. Vue简易图片手风琴组件,包含宽度适应(JS操作CSS实现)
  4. 【去广告插件推荐】AdBlock让浏览器清净
  5. 程序员必备算法——排列组合
  6. 华为手机修改dns服务器,手机更改服务器dns地址
  7. win7上的截图小工具
  8. opencv python 巡线 最小二乘法
  9. stacey矩阵 敏捷_通过矩阵镜头实现敏捷
  10. cmake导入so库_CMAKE使用链接第三方SO库