回答

收藏

Go 示例和习语

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

学习这种语言Go 代码不多,我相信我不是唯一一个试图使用它的人。因此,如果您发现关于该语言的有趣信息,请在此发布示例。
% }  W+ f" `( ~" c& N- a我也在找
/ B6 A# p, T  s( K2 x& S, X. J" V* V在 Go 常用的做事方式,5 d0 k" j; }8 p8 |
C/C   思维方式移植到 Go,
. V: Q- y- h& L+ P) u0 I5 l; |7 b常见的语法陷阱,
0 w, n, G7 d" ^. K任何有趣的事情,真的。
                                                               
% J; L1 \4 Y9 Y, [  e' o  v8 @    解决方案:                                                               
9 ~' n9 N- j$ l# E                                                                推迟声明
: f4 |: W% x: `& P5 U# |3 ?* @延迟语句调用函数,该函数的执行被推迟到周围函数返回的那一刻。5 e- }; h" S- T) N, b
DeferStmt = “defer” 表达式。$ Q3 c8 G+ |; C
表达式必须是函数或方法调用。每次执行defer在句子中,函数调用的参数将被评估和重新保存,但函数不会被调用。在返回周围函数之前,立即调用延迟函数LIFO 顺序执行,但返回值(如有)评估后。# M, T" n: B2 L$ e

    9 H, i. [$ J/ d& v8 g. j# M
  • lock(l);defer unlock(l);  // unlocking happens before surrounding function returns// prints 3 2 1 0 before surrounding function returnsfor i := 0; i 更新:
    % W7 s/ J; H2 k4 @2 P  s
  • 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)}
    - m8 e. Y& K3 A5 ~
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则