匿名函数
小总结
//并发处理 go func() {....}() //goto语句 代码中随意跳动 不要混淆 goto xxxx
//匿名函数就是一次性执行一批代码 func() {....}() //匿名有参数有返回数值的函数 func (声明传值) (声明返回值) {...}(实际调用传值) //go和匿名函数配合可以作为 并发执行代码功能。 go func() {....}() //defer和func配合可以 延迟执行一段代码。 defer func() {....}()
匿名函数
类似一次性塑料袋
没有起名字的必要
没有复用的价值
但是又有必要封装起来用一次
defer匿名函数
1 package main 2 3 import "fmt" 4 5 func main() { 6 7 defer fmt.Println("我是倒数第一") 8 //本来应该是func(){..}() 但是因为里面的内容都是defer的 所以整体defer了匿名func 9 defer func() { 10 //封装在一起,内部是顺序的 11 fmt.Println("我是倒数第二") 12 fmt.Println("我是倒数第三") 13 fmt.Println("我是倒数第四") 14 15 }() 16 17 } 18 /* 19 我是倒数第二 20 我是倒数第三 21 我是倒数第四 22 我是倒数第一 23 */
并发一段代码
package main import ( "fmt" "time" ) func main() { //并发执行一段代码,go中代码跑在子协助里 go func() { fmt.Println("哈哈哈哈哈222") time.Sleep(1*time.Second) fmt.Println("嘎嘎嘎嘎222") time.Sleep(1*time.Second) fmt.Println("嘻嘻嘻嘻嘻2222") time.Sleep(1*time.Second) }() //以下代码跑在主【协程/微现成】里 //主协程死了,子协程也会跟着挂. fmt.Println("哈哈哈哈哈1111") time.Sleep(1*time.Second) fmt.Println("嘎嘎嘎嘎1111") time.Sleep(1*time.Second) fmt.Println("嘻嘻嘻嘻嘻1111") time.Sleep(1*time.Second) } /* 哈哈哈哈哈1111 哈哈哈哈哈222 嘎嘎嘎嘎222 嘎嘎嘎嘎1111 嘻嘻嘻嘻嘻2222 嘻嘻嘻嘻嘻1111 */
带有参数和返回值的匿名函数
1 //解释 2 func (声明传值) (声明返回值) { 3 .... 4 }(实际调用传值) 5 6 7 8 9 //普通的有名有参数的函数 10 package main 11 12 import "fmt" 13 14 func test(name string, age int) (renpin int) { 15 renpin = 100 16 return 17 } 18 19 func main() { 20 renpin := test("张三", 10) 21 fmt.Println(renpin) 22 } 23 /* 24 100 25 */ 26 27 28 //转换成匿名函数 29 package main 30 31 import "fmt" 32 33 func main() { 34 35 fmt.Println( 36 func(name string, age int) (renpin int) { 37 renpin = 100 38 return 39 }("张三", 10)) 40 } 41 /* 42 100 43 */