培训首页  >  web前端新闻  >  兄弟连区块链技术培训分享Go语言-函数

兄弟连区块链技术培训分享Go语言-函数

[2018-08-22 11:29:37] 浏览量:54 来源:

北京兄弟连IT

  Go语言经过十余年的发展,已成为最流行的新兴语言。目前,Go语言已成为云计算领域的首选语言,且随着近几年区块链的流行,作为底层开发语言的Go再次火爆成为区块链领域第一编程语言,以--坊、IBMFabic等重量级的区块链项目都是基于Go语言开发的。

 

  殊不知,Go语言可开发的应用项目还有很多。除云计算、区块链等开源项目外,还包含Devops、人工智能、游戏、存储引擎、Web、系统/命令行工具、中间件、测试/持续交付、文件系统等各方面的开源项目。

一、函数式编程

 

1、函数式编程简介

 

函数式编程是一种编程模型,将计算机运算看作是数学中函数的计算,并且避免了状态以及变量的概念。

在面向对象思想产生前,函数式编程已经有数十年的历史。随着硬件性能的提升以及编译技术和虚拟机技术的改进,一些曾被性能问题所限制的动态语言开始受到关注,PythonRubyLua等语言都开始在应用中崭露头角。动态语言因其方便快捷的开发方式成为很多人喜爱的编程语言,伴随动态语言的流行,函数式编程也开始流行。

 

2、函数式编程的特点

 

函数式编程的主要特点如下:

A、变量的不可变性: 变量一经赋值不可改变。如果需要改变,则必须复制出去,然后修改。

B、函数是一等公民: 函数也是变量,可以作为参数、返回值等在程序中进行传递。

C、尾递归:如果递归很深的话,堆栈可能会爆掉,并导致性能大幅度下降。而尾递归优化技术(需要编译器支持)可以在每次递归时重用stack

 

3、高阶函数

 

在函数式编程中,函数需要作为参数传递,即高阶函数。在数学和计算机科学中,高阶函数是至少满足下列一个条件的函数:

A、函数可以作为参数被传递

B、函数可以作为返回值输出

 

二、匿名函数

 

1、匿名函数简介

 

匿名函数是指不需要定义函数名的一种函数实现方式,匿名函数由一个不带函数名的函数声明和函数体组成。CC++不支持匿名函数。

 

func(xy 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


关注兄弟连区块链公众号可以获得更多区块链技术干货!!!



文中图片素材来源网络,如有侵权请联系删除
  • 软件开发
  • 软件测试
  • 数据库
  • Web前端
  • 大数据
  • 人工智能
  • 零基础
  • 有HTML基础
  • 有PHP基础
  • 有C语言基础
  • 有JAVA基础
  • 其他计算机语言基础
  • 周末班
  • 全日制白班
  • 随到随学

网上报名

热门信息