偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Go 語(yǔ)言中 defer 使用時(shí)有哪些陷阱?

開(kāi)發(fā) 前端
本文主要介紹在使用 defer? 語(yǔ)句時(shí)可能會(huì)遇到的陷阱。分別是 defer? 語(yǔ)句不可以在 return? 語(yǔ)句之后;defer 語(yǔ)句執(zhí)行的匿名函數(shù),匿名函數(shù)的參數(shù)會(huì)被預(yù)先處理。

01 、介紹

defer 的使用方式是在其后緊跟一個(gè)函數(shù)調(diào)用或方法調(diào)用,確保在其所在的函數(shù)體返回之前執(zhí)行其調(diào)用的函數(shù)或方法。

在 Go 語(yǔ)言中,defer 一般用于資源釋放,或使用 defer 調(diào)用一個(gè)匿名函數(shù),在匿名函數(shù)中使用 recover() 處理異常 panic。

在使用 defer 時(shí),也很容易遇到陷阱,本文我們介紹使用 defer 時(shí)有哪些陷阱。

02、 defer 陷阱

defer 語(yǔ)句不可以在 return 語(yǔ)句之后。

示例代碼:

func main() {
 name := GetUserName("phper")
 fmt.Printf("name:%s\n", name)
 if name != "gopher" {
  return
 }
 defer fmt.Println("this is a defer call")
}

func GetUserName(name string) string {
 return name
}

輸出結(jié)果:

name:phper

閱讀上面這段代碼,我們?cè)?nbsp;return 語(yǔ)句之后執(zhí)行 defer 語(yǔ)句,通過(guò)輸出結(jié)果可以發(fā)現(xiàn) defer 語(yǔ)句調(diào)用未執(zhí)行。

雖然 defer 可以在函數(shù)體中的任意位置,我們也是需要特別注意使用 defer 的位置是否可以執(zhí)行。

defer 語(yǔ)句執(zhí)行匿名函數(shù),參數(shù)預(yù)處理。

示例代碼:

func main() {
 var count int64
 defer func(data int64) {
  fmt.Println("defer:", data)
 }(count + 1)
 count = 100
 fmt.Println("main:", count)
}

輸出結(jié)果:

main: 100
defer: 1

閱讀上面這段代碼,首先我們定義一個(gè)類(lèi)型為 int64 的變量 count,然后使用 defer 語(yǔ)句執(zhí)行一個(gè)匿名函數(shù),匿名函數(shù)傳遞參數(shù)為 count + 1,最終 main 函數(shù)輸出 100,defer 執(zhí)行的匿名函數(shù)輸出 1。

因?yàn)樵趫?zhí)行 defer 語(yǔ)句時(shí),執(zhí)行了 count + 1,并先將其存儲(chǔ),等到 defer 所在的函數(shù)體 main 執(zhí)行完,再執(zhí)行 defer 語(yǔ)句調(diào)用的匿名函數(shù)的函數(shù)體中的代碼。

03 、總結(jié)

本文主要介紹在使用 defer 語(yǔ)句時(shí)可能會(huì)遇到的陷阱。分別是 defer 語(yǔ)句不可以在 return 語(yǔ)句之后;defer 語(yǔ)句執(zhí)行的匿名函數(shù),匿名函數(shù)的參數(shù)會(huì)被預(yù)先處理。

讀者朋友們?cè)谑褂?Go 語(yǔ)言的 defer 語(yǔ)句時(shí),還遇到過(guò)哪些陷阱?

責(zé)任編輯:武曉燕 來(lái)源: Golang語(yǔ)言開(kāi)發(fā)棧
相關(guān)推薦

2013-06-25 09:52:32

GoGo語(yǔ)言Go編程

2021-06-07 23:19:44

Golang語(yǔ)言 Defer

2024-04-01 00:02:56

Go語(yǔ)言代碼

2023-07-03 00:44:26

Go語(yǔ)言MySQL

2021-07-08 23:53:44

Go語(yǔ)言拷貝

2023-10-09 07:14:42

panicGo語(yǔ)言

2024-05-10 08:36:40

Go語(yǔ)言對(duì)象

2023-06-26 00:03:55

Go語(yǔ)言類(lèi)型

2014-04-09 09:32:24

Go并發(fā)

2010-08-06 09:25:19

重定向恢復(fù)DB2

2023-01-12 08:52:50

GoroutinesGo語(yǔ)言

2023-12-21 07:09:32

Go語(yǔ)言任務(wù)

2024-04-07 11:33:02

Go逃逸分析

2021-07-15 23:18:48

Go語(yǔ)言并發(fā)

2011-07-14 10:23:33

C語(yǔ)言

2025-02-06 13:19:31

RustPin系統(tǒng)

2023-01-31 08:48:49

Go語(yǔ)言文件

2021-04-23 07:59:17

Godefer 鏈表

2023-01-30 15:41:10

Channel控制并發(fā)

2023-11-30 08:09:02

Go語(yǔ)言
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)