回答

收藏

Go 示例和习语

技术问答 技术问答 256 人阅读 | 0 人回复 | 2023-09-12

学习这种语言Go 代码不多,我相信我不是唯一一个试图使用它的人。因此,如果您发现关于该语言的有趣信息,请在此发布示例。
. v4 p4 O8 y  I+ W% J. \我也在找3 O: K' S; K; [( c
在 Go 常用的做事方式,! N+ \+ {: k5 {0 S3 ^. Z! E# v2 \
C/C   思维方式移植到 Go,
; a+ c$ b* |& a常见的语法陷阱,
- g1 C0 Y$ ]: T) \0 D9 n. i( B; y任何有趣的事情,真的。
                                                               
, _; ~. o3 S* j. o  J- M* D    解决方案:                                                               
9 m( W. X0 R/ ]/ n                                                                推迟声明+ X- K9 v8 u. e
延迟语句调用函数,该函数的执行被推迟到周围函数返回的那一刻。1 w, R$ ~, ?9 N. b( |
DeferStmt = “defer” 表达式。" k3 B4 o7 N; o" W
表达式必须是函数或方法调用。每次执行defer在句子中,函数调用的参数将被评估和重新保存,但函数不会被调用。在返回周围函数之前,立即调用延迟函数LIFO 顺序执行,但返回值(如有)评估后。# l" s3 X" T3 R/ a# L
    3 {9 o- M4 P" {8 E
  • lock(l);defer unlock(l);  // unlocking happens before surrounding function returns// prints 3 2 1 0 before surrounding function returnsfor i := 0; i 更新:
    ! s$ O6 N  H7 \9 c: c& z( g# b
  • defer现在也处理惯用的方法panic例外样:[code]package mainimport "fmt"func main()      f()    fmt.Println("Returned normally from f.")}func f()      defer func()          if r := recover(); r != nil                fmt.Println("Recovered in f",r)        }    }()    fmt.Println("Calling g.")    g(0)    fmt.Println("Returned normally from g.")}func g(i int) {    if i > 3 {        fmt.Println(&quotanicking!")        panic(fmt.Sprintf("%v",i))   }    defer fmt.Println("Defer in g",i)    fmt.Println(&quotrinting in g",i)    g(i 1)}& [- |/ d+ f; O0 }8 \
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则