Go 头等函数和延迟函数

头等函数

能够把函数赋值给变量,能够把函数做为其余函数的参数或者返回值,就是Go中头等函数的机制。闭包

Func main(){
	a := func(){
		print
	}
	a()
}

匿名函数

a函数没有名称,这类函数称为匿名函数。函数

自定义函数类型

经过如下语法自定义函数类型:code

type add func(a int ,b int) int

使用:匿名函数

Func main(){
	var a add = func(a int, b int) int{
		return a + b
	}
	s := a(5, 6)
	print s
}

将自定义函数类型赋值给a,以后能够调用a。变量

高阶函数

高阶函数知足下列之必定义:语法

  • 接收一个或多个函数做为参数
  • 返回值是一个函数
Func simple(a func(a, b int) int){
	print a(60, 7)
}

Func main(){
	f := func (a, b int) int{
		return a + b
	}
	simple(f)
}

返回函数

func fimple() func(a, b int) int{
	f := func(a, b int) int{
		return a +b
	}
	return f
}

func main(){
	s := simple()
	print s(60, 7)
}

闭包

闭包是匿名函数一个特例,当一个匿名函数所访问的变量定义在函数体外部时,这样的匿名函数称为闭包。方法

func main(){
	a := 5
	func() {
		print a
	}()
}

上面例子中在匿名函数中访问了变量a,a存在匿名函数外部,这个匿名函数就是闭包。im

每一个闭包都会绑定一个它本身的外围变量。co

延迟函数(defer)

含有defer语句的函数,会在方法返回以前,调用defer修饰的函数。return

func finished(){
	print 111
}

func largest(){
	defer finished()
	print 222
}

执行结果为:222,111

Largest方法开始执行,在largest方法返回以前会调用defer修饰的finished方法。

延迟函数的参数求值是在主函数顺序执行到defer语句的时候,而不是延迟函数执行的时候。

相关文章
相关标签/搜索