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語句的時候,而不是延遲函數執行的時候。

相關文章
相關標籤/搜索