zoukankan      html  css  js  c++  java
  • 匿名函数

     

     小总结

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

     

     

     

  • 相关阅读:
    pickle模块使用
    Graphviz安装教程
    Redis常用命令
    MongoDB和Redis的区别
    UVA-1572
    poj2352
    poj1195
    Codeforces Round #430 (Div. 2)
    Codeforces Round #431 (Div. 2) B. Tell Your World
    poj3278 【BFS】
  • 原文地址:https://www.cnblogs.com/chaoyangxu/p/11800310.html
Copyright © 2011-2022 走看看