学习这门语言的 Go 代码并不多,而且我确信我不是唯一一个尝试使用它的人。因此,如果您发现有关该语言的有趣信息,请在此处发布示例。
我也在找
推迟声明
“延迟”语句调用一个函数,该函数的执行被推迟到周围函数返回的那一刻。 DeferStmt = “defer” 表达式。 表达式必须是函数或方法调用。每次执行“defer”语句时,都会评估并重新保存函数调用的参数,但不会调用该函数。延迟函数调用在周围函数返回之前立即以 LIFO 顺序执行,但在返回值(如果有)被评估之后。
“延迟”语句调用一个函数,该函数的执行被推迟到周围函数返回的那一刻。
DeferStmt = “defer” 表达式。
表达式必须是函数或方法调用。每次执行“defer”语句时,都会评估并重新保存函数调用的参数,但不会调用该函数。延迟函数调用在周围函数返回之前立即以 LIFO 顺序执行,但在返回值(如果有)被评估之后。
lock(l); defer unlock(l); // unlocking happens before surrounding function returns // prints 3 2 1 0 before surrounding function returns for i := 0; i <= 3; i++ { defer fmt.Print(i); }
更新:
defer现在也处理惯用方式panic在例外样方式:
defer
panic
package main import "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("Panicking!") panic(fmt.Sprintf("%v", i)) } defer fmt.Println("Defer in g", i) fmt.Println("Printing in g", i) g(i+1) }