本文实例讲述了GO语言延迟函数defer用法。分享给大家供大家参考。具体分析如下:
defer 在声明时不会立即执行,而是在函数 return 后,再按照 FILO (先进后出)的原则依次执行每一个 defer,一般用于异常处理、释放资源、清理数据、记录日志等。这有点像面向对象语言的析构函数,优雅又简洁,是 Golang 的亮点之一。
代码1:了解 defer 的执行顺序
复制代码 代码如下:package main
import "fmt"
func fn(n int) int {
defer func() {
n++
fmt.Println("3st:", n)
}()
defer func() {
n++
fmt.Println("2st:", n)
}()
defer func() {
n++
fmt.Println("1st:", n)
}()
return n //没有做任何事情
}
func main() {
fmt.Println("函数返回值:", fn(0))
}
输出:
1st: 1
2st: 2
3st: 3
函数返回值: 0
代码2:经典应用实例
复制代码 代码如下:func CopyFile(dst, src string) (w int64, err error) {
srcFile, err := os.Open(src)
if err != nil {
return
}
defer srcFile.Close() //每次申请资源时,请习惯立即申请一个 defer 关闭资源,这样就不会忘记释放资源了
dstFile, err := os.Create(dst)
if err != nil {
return
}
defer dstFile.Close()
return io.Copy(dstFile, srcFile)
}
defer 还有一个重要的特性,就是即便函数抛出了异常,也会被执行的。 这样就不会因程序出现了错误,而导致资源不会释放了。
希望本文所述对大家的GO语言程序设计有所帮助。
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新动态
- 徐凤仪《在角落唱着歌》[FLAC/分轨][244.43MB]
- 【柔顺爵士(P)】Streetwize-2024-LiftMeUp(FLAC)
- 【爵士沙发】Magmatunes-2024-FlyingHigh(FLAC)
- 玖月奇迹《试音天碟K2母带》[WAV+CUE]
- 张美玲.1998-世界第一等【南方】【WAV+CUE】
- 梦剧院.1988-飘去夏天(2018三十周年纪念版)【乐意唱片】【WAV+CUE】
- 云朵.2011-云朵【啊呀啦嗦】【WAV+CUE】
- 群星.1998-琼瑶98年度主题曲精选大碟【上华】【WAV+CUE】
- 胡鸿钧.2023-我们在结束时开始新曲+精丫TVB.MUSIC】【WAV+CUE】
- 任洁玲.1995-我们有没有爱过【飞碟】【WAV+CUE】
- 海来阿木《西楼情歌》1:1母版直刻[320K/MP3][139.61MB]
- 海来阿木《西楼情歌》1:1母版直刻[FLAC/分轨][344.97MB]
- 群星《影视剧 群星闪耀时 影视原声带》[320K/MP3][38.69MB]
- 姜育恒.1998-成名金曲(马来西亚瑞华金碟珍藏版)【瑞华】【WAV+CUE】
- 水木年华.2006-生命狂想曲特别版2CD【水木同创】【WAV+CUE】