php轉golang中,對defer關鍵字寫一下初步的心得php
defer特性:golang
代碼放上來(defer的三個不一樣位置以及不一樣的函數返回的值也不一樣)數據庫
package main
import "fmt"
func main() {
println(DeferFunc1(1))
println(DeferFunc2(1))
println(DeferFunc3(1))
}
func DeferFunc1(i int) (t int) {
t = i
fmt.Println("t1",t);
defer func() {
fmt.Println("t3",t);
t += 3
fmt.Println("t4",t);
}()
fmt.Println("t2",t);
return
}
func DeferFunc2(i int) int {
t := i
fmt.Println("t5",t);
defer func() {
fmt.Println("t7",t);
t += 3
fmt.Println("t8",t);
}()
fmt.Println("t6",t);
return t
}
func DeferFunc3(i int) (t int) {
fmt.Println("t9",t);
defer func() {
fmt.Println("t11",t);
t += i
fmt.Println("t12",t);
}()
fmt.Println("t10",t);
return 2
}
複製代碼
先放出來結果bash
總結:若是defer要返回某些參數的值,而不是普通的關閉數據庫鏈接等等,那麼要選擇好對應參數的做用域,做用域不一樣結果也是截然不同函數
(over. 若有不一樣意見歡迎文明交流,但願各位大佬給出指點意見)ui