跳转至

编程语言

深入了解golang中的defer关键字

golang中的defer关键字是用来声明一个延迟函数,一般称这个函数为defer函数,该函数会在defer语句所在的函数返回之前会执行。通过defer关键字,我们可以修改函数命名返回值,进行资源释放等操作,总的来说defer函数有如下特点和功能:

  • 函数返回之前执行
  • 可以放在函数中任意位置
  • 可以同时设置多个defer函数,多个defer函数执行遵循FILO顺序
  • defer函数的传入参数在定义时就已经明确
  • 可以修改函数中的命名返回值
  • 用于文件资源,锁资源、数据库连接等释放和关闭
  • 和recover一起处理panic

本文将介绍defer上面的几个特性,如果想深入了解defer底层实现机制,可以阅读笔者写的《深入Go语言之旅 - 基础篇 - defer函数》

defer会在函数返回之前执行

当程序执行一个函数时候,会将函数的上下文(输入参数,返回值,输出参数等信息)作为栈帧放在程序内存的栈中,当函数执行完成之后,设置返回值并返回,此函数才真正完成执行。

defer语句函数会在函数返回之前执行,下面程序将会依次输出B A:

func main() {
    defer fmt.Println("A")
    fmt.Println("B")
}

PHP7各个版本新增特性

PHP从5.6 跳过6直接来到7,带来新的语言特性,更带来性能很大飞越。根据w3techs统计截止截止2019年5月18月有79%网站使用PHP做为服务端开发语言,这些网站使用的PHP版本统计如下: