1、计算示例闭包
package main import "fmt" func main() { a := 100 b := 2 fmt.Printf("%d + %d = %d\n", a, b, Add(a, b)) fmt.Printf("%d - %d = %d\n", a, b, Sub(a, b)) fmt.Printf("%d * %d = %d\n", a, b, Mul(a, b)) fmt.Printf("%d / %d = %d\n", a, b, Div(a, b)) } func Add(x, y int) int { return x + y } func Sub(x, y int) int { return x - y } func Mul(x, y int) int { return x * y } func Div(x, y int) int { return x / y }
运行代码,输出结果以下:ide
100 + 2 = 102 100 - 2 = 98 100 * 2 = 200 100 / 2 = 50
解释:在GO语言中,函数的定义使用func关键字声明Add是一个函数,函数中须要两个传参,分别是x和y,并指定x和y都是int类型。大括号前的那个int是Add函数的返回值的类型,定义Add函数返回的值也必须是int类型。函数
2、多返回值特性
GO语言是一个多返回值类型语言,若是是多个返回值的话,能够写成(int, int), return,必须返回数量相等的返回值,示例以下:code
package main import "fmt" func vals() (int, int) { return 3, 7 } func main() { a, b := vals() fmt.Println(a) fmt.Println(b) _, c := vals() //使用空白的标识符_,能够选择不接收返回值 fmt.Println(c) }
3、匿名函数和闭包
匿名函数:就是没有名称的函数
闭包:在一个函数中,又定义了一个函数叫闭包
示例以下:it
package main import "fmt" func intSeq() func() int { i := 0 return func() int { i++ return i } } func main() { nextInt := intSeq() fmt.Println(nextInt()) fmt.Println(nextInt()) fmt.Println(nextInt()) }
执行结果以下:class
1 2 3
解释:1)func intSeq() func() int {} //首先顶一个intSeq()的函数,这个函数比较特殊,它的返回值也是一个函数func(),func()这个函数呢是没有名称的函数,也就是匿名函数,由于func()是在intSeq这个函数中的函数,因此func()又能够被称为闭包,最终intSeq()是将func()函数做为返回值返回。
2)nextInt := intSeq() //把intSeq()函数赋值给nextInt这个变量
3)fmt.Println(nextInt()) //输出nextInt的值,nextInt就调用intSeq()
4)
i := 0
return func() int {
i++
return i //给i变量初始化一个值为0,由于nextInt调用intSeq(),而func()的返回值就是intSeq()的返回值,则变量i循环增长,每次增长1,就这样每循环一次,新的i的变量就获得新值,i就把值返回给func()这个匿名函数,而后func()这个匿名函数又把值返回给intSeq()这个函数,而后intSeq()函数又把值赋值给nextInt变量,最终输出出来。import