兄弟连区块链技术培训分享Go语言-函数
Go语言经过十余年的发展,已成为最流行的新兴语言。目前,Go语言已成为云计算领域的首选语言,且随着近几年区块链的流行,作为底层开发语言的Go再次火爆成为区块链领域第一编程语言,以-太-坊、IBM的Fabic等重量级的区块链项目都是基于Go语言开发的。
殊不知,Go语言可开发的应用项目还有很多。除云计算、区块链等开源项目外,还包含Devops、人工智能、游戏、存储引擎、Web、系统/命令行工具、中间件、测试/持续交付、文件系统等各方面的开源项目。
一、函数式编程
1、函数式编程简介
函数式编程是一种编程模型,将计算机运算看作是数学中函数的计算,并且避免了状态以及变量的概念。
在面向对象思想产生前,函数式编程已经有数十年的历史。随着硬件性能的提升以及编译技术和虚拟机技术的改进,一些曾被性能问题所限制的动态语言开始受到关注,Python、Ruby和Lua等语言都开始在应用中崭露头角。动态语言因其方便快捷的开发方式成为很多人喜爱的编程语言,伴随动态语言的流行,函数式编程也开始流行。
2、函数式编程的特点
函数式编程的主要特点如下:
A、变量的不可变性: 变量一经赋值不可改变。如果需要改变,则必须复制出去,然后修改。
B、函数是一等公民: 函数也是变量,可以作为参数、返回值等在程序中进行传递。
C、尾递归:如果递归很深的话,堆栈可能会爆掉,并导致性能大幅度下降。而尾递归优化技术(需要编译器支持)可以在每次递归时重用stack。
3、高阶函数
在函数式编程中,函数需要作为参数传递,即高阶函数。在数学和计算机科学中,高阶函数是至少满足下列一个条件的函数:
A、函数可以作为参数被传递
B、函数可以作为返回值输出
二、匿名函数
1、匿名函数简介
匿名函数是指不需要定义函数名的一种函数实现方式,匿名函数由一个不带函数名的函数声明和函数体组成。C和C++不支持匿名函数。
func(x,y int) int {
return x + y
}
2、匿名函数的值类型
在Go语言中,所有的函数是值类型,即可以作为参数传递,又可以作为返回值传递。
匿名函数可以赋值给一个变量:
f := func() int {
...
}
定义一种函数类型:
type CalcFunc func(x, y int) int
函数可以作为值传递:
func AddFunc(x, y int) int {
return x + y
}
func SubFunc(x, y int) int {
return x - y
}
...
func OperationFunc(x, y int, calcFunc CalcFunc) int {
return calcFunc(x, y)
}
func main() {
sum := OperationFunc(1, 2, AddFunc)
difference := OperationFunc(1, 2, SubFunc)
...
}
函数可以作为返回值:
// 第一种写法
func add(x, y int) func() int {
f := func() int {
return x + y
}
return f
}
// 第二种写法
func add(x, y int) func() int {
return func() int {
return x + y
}
}
当函数返回多个匿名函数时建议采用第一种写法:
func calc(x, y int) (func(int), func()) {
f1 := func(z int) int {
return (x + y) * z / 2
}
f2 := func() int {
return 2 * (x + y)
}
return f1, f2
}
匿名函数的调用有两种方法:
// 通过返回值调用
func main() {
f1, f2 := calc(2, 3)
n1 := f1(10)
n2 := f1(20)
n3 := f2()
fmt.Println("n1, n2, n3:", n1, n2, n3)
}
// 在匿名函数定义的同时进行调用:花括号后跟参数列表表示函数调用
func safeHandler() {
defer func() {
err := recover()
if err != nil {
fmt.Println("some exception has happend:", err)
}
}()
...
}
高能预警,兄弟连教育区块链直播课程8月持续火爆来袭!
原价1188元的12节区块链进阶课程,现仅需1元!
还可免费领取《Go语言基础实战项目开发》与《Go语言高级实战项目开发》教材两本!!
限时限量!!先到先得!!
http://www.ydma.cn/open/course/24
关注兄弟连区块链公众号可以获得更多区块链技术干货!!!
网上报名
新闻资讯
更多>>-
兄弟连“因材施教搭建桥梁”计划正式启动
2018-06-14
-
兄弟连PHP培训:高薪就业才是硬道理
2018-06-14
-
兄弟连北京安卓培训:万元高薪班级爆满
2018-06-14
-
25W高薪挑战安卓 零基础培训首选兄弟连
2018-06-14
-
兄弟连PHP教程发布 海量资源应有尽有
2018-06-14