码迷,mamicode.com
首页 > 其他好文 > 详细

Go中函数、匿名函数和递归的使用

时间:2018-10-04 09:02:37      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:隐式   程序   传递   大写   project   string   返回   ons   str1   

// code_005_functions project main.go package main import ( "fmt" ) func Test1(a int, b, c string) (str3 string) { fmt.Printf("%d, %s, %s", a, b, c) return string(a) + b + c } func Test2() int { i := 1 sum := 0 for i = 1; i <= 100; i++ { sum += i } return sum } func Test3(num int) int { //递归函数的使用 if num == 1 { return 1 } return num + Test3(num-1) } //函数作为参数传递,我们使用type来定义 //它的类型就是所有拥有相同的参数,相同的返回值的一种类型。 type FuncType func(int, int) int //func后面没有函数名 func Calc(a, b int, f FuncType) (result int) { result = f(a, b) return } func Add(a, b int) int { return a + b } func Minus(a, b int) int { return a - b } func squares() func() int { var x int return func() int { //匿名函数 x++ //捕获外部变量 return x * x } } func main() { //关键func、函数名、参数列表、返回值、函数体和返回语句 //函数名首字母小写即为private,大写即为public //如果有返回值, 那么必须在函数的内部添加return语句 str1 := Test1(11, "你好", "世界") fmt.Println("\n" + str1) //递归函数 sum := Test3(100) fmt.Println(sum) //函数作为参数传递 res1 := Calc(10, 20, Add) res2 := Calc(100, 60, Minus) fmt.Println(res1) fmt.Println(res2) //匿名函数与闭包 //所谓闭包就是一个函数“捕获”了和它在同一作用域的其它常量和变量。 //这就意味着当闭包被调用的时候,不管在程序什么地方调用,闭包能够使用这些常量或者变量。 //它不关心这些捕获了的变量和常量是否已经超出了作用域,所以只有闭包还在使用它,这些变量就还会存在。 //在Go语言里,所有的匿名函数(Go语言规范中称之为函数字面量)都是闭包。 str := "ck_god" f1 := func() { //方式1: fmt.Printf("哈哈哈,我是%s\n", str) } f1() func() { //方式2:匿名函数 fmt.Println("不好意思,还是我") }() type FuncType func() var f2 FuncType = f1 f2() //方式3:函数变量接收后调用 v := func(a, b int) (result int) { result = a + b return }(1, 1) //方式4:有参有返回值的匿名函数 fmt.Println("v=", v) //闭包捕获外部变量特点:修改外部变量的值 fmt.Println("\n=========\n") i := 10 str2 := "ck_god" func() { i = 100 str = "go" fmt.Printf("内部:i = %d, str2 = %s\n", i, str2) }() fmt.Printf("外部:i = %d, str2 = %s\n", i, str2) //匿名函数作为返回值 f := squares() fmt.Println(f()) fmt.Println(f()) fmt.Println(f()) //我们看到变量的生命周期不由它的作用域决定:squares返回后,变量x仍然隐式的存在于f中 }

Go中函数、匿名函数和递归的使用

标签:隐式   程序   传递   大写   project   string   返回   ons   str1   

原文地址:http://blog.51cto.com/13914991/2292800

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!