匿名函数

 

 小总结

//并发处理
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  */

 

 

 

原文地址:https://www.cnblogs.com/chaoyangxu/p/11800310.html