回答

收藏

Go 示例和习语

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

学习这种语言Go 代码不多,我相信我不是唯一一个试图使用它的人。因此,如果您发现关于该语言的有趣信息,请在此发布示例。
! Y% ?! X. K3 ~5 c  v  w3 S; `$ }我也在找" U+ t' m8 k2 }
在 Go 常用的做事方式,
4 r) N4 \' x2 ?8 yC/C   思维方式移植到 Go,' }0 ]  z' g1 A2 _& w: {0 L
常见的语法陷阱,
& `$ _: w- R3 x+ |4 [. L/ Q8 I% E任何有趣的事情,真的。
                                                               
" K6 ~6 e0 D0 @- g& n    解决方案:                                                                4 S) {. p4 l4 i  Z: N" \
                                                                推迟声明
# a1 [6 A! G( ]% m; V. ^延迟语句调用函数,该函数的执行被推迟到周围函数返回的那一刻。4 y- [2 Y) Z' I! k2 c9 i& y! K/ F" L
DeferStmt = “defer” 表达式。4 `$ i; R7 ^# `( S
表达式必须是函数或方法调用。每次执行defer在句子中,函数调用的参数将被评估和重新保存,但函数不会被调用。在返回周围函数之前,立即调用延迟函数LIFO 顺序执行,但返回值(如有)评估后。
/ @; z5 Y8 A6 t. q

    , g. B# \8 ~5 d
  • lock(l);defer unlock(l);  // unlocking happens before surrounding function returns// prints 3 2 1 0 before surrounding function returnsfor i := 0; i 更新:% @; s0 V( j2 q' o1 R/ ?! s# d  s+ h
  • 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)}
    : X, D9 b) Z6 Y4 U1 h
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则