学习这种语言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("anicking!") panic(fmt.Sprintf("%v",i)) } defer fmt.Println("Defer in g",i) fmt.Println("rinting in g",i) g(i 1)}& [- |/ d+ f; O0 }8 \