学习这种语言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("anicking!") panic(fmt.Sprintf("%v",i)) } defer fmt.Println("Defer in g",i) fmt.Println("rinting in g",i) g(i 1)} - m8 e. Y& K3 A5 ~