当前位置: 首页 > wzjs >正文

网站安装模板移动应用开发是做什么的

网站安装模板,移动应用开发是做什么的,长春火车站哪个区,网站开发案例php目录 1.使用场景 2.执行顺序 3.for循环中的defer及defer中的闭包陷阱 4.defer与返回值的关系 5.总结 1.使用场景 在编程的时候,经常需要打开一些资源,比如数据库连接、文件、锁等,这些资源需要在用完之后释放掉,否则会造成内…

目录

1.使用场景

2.执行顺序

3.for循环中的defer及defer中的闭包陷阱

4.defer与返回值的关系

5.总结


1.使用场景

在编程的时候,经常需要打开一些资源,比如数据库连接、文件、锁等,这些资源需要在用完之后释放掉,否则会造成内存泄漏。

在 Go 中 defer 一般用于异常处理、资源释放、文件关闭、解锁互斥量等操作。有一个编码好习惯就是,在初始化资源后,可以在后面紧跟一个defer函数取释放资源。

2.执行顺序

defer执行顺序是后进先出(底层是由链栈实现的)。

在函数内,defer与return的执行顺序是:defer在函数内return执行之后、函数退出之前执行

3.for循环中的defer及defer中的闭包陷阱

闭包:一个匿名函数捕获了外部变量,就形成了闭包

Go 语言 中,如果在循环内执行 defer 语句,每次循环中执行的 defer 语句都会将其延迟的函数调用压入栈中。所有的 defer 调用都会在循环所在的函数返回之前按照后进先出(LIFO) 顺序执行。

还有超级重要,即defer 声明时函数的参数会立即求值(这针对的是有参数传入的函数),而不是等到延迟调用时才求值。

重要的事情说三遍,defer 声明时函数的参数会立即求值,deferzai 声明时函数的参数会立即求值,defer 声明时函数的参数会立即求值!!!

什么是函数的参数会立即求值?

栗子1:

package mainimport "fmt"func main() {for i := 0; i < 3; i++ {defer func(val int) {    // 闭包,捕获了外部变量ifmt.Println(val) // 打印传递的值}(i) // 在这里立即捕获当前的 i 值,}fmt.Println("Loop ended")
}

输出结果:

Loop ended
2
1
0

 栗子2: 

package mainimport "fmt"func main() {for i := 0; i < 3; i++ {defer func() {   // 闭包,捕获了外部变量ifmt.Println(i) // 直接引用 i,持有的是引用,而非具体的值}()}fmt.Println("Loop ended")
}

输出结果:

Loop ended
3
3
3

造成这种结果的原因:

闭包捕获的是引用,而非具体的值!!!这一点很重要

栗子1:通过参数传递固定 i 的值,每个匿名函数保存的是当前循环中 i 的值。因此,输出结果是 2, 1, 0

栗子2:匿名函数捕获的是循环变量 i 的引用,所有匿名函数访问的都是同一个变量 i,而此时 i 的值已经是 3。因此,输出结果是 3, 3, 3

 

4.defer与返回值的关系

 栗子3:        

func foo() int {    //返回值未命名i := 0defer func() { i++ }()return i
}    // 返回0

栗子4:

func bar() (i int) {    // 返回值命名了i = 0defer func() { i++ }()return i
}    // 返回1

 造成这种结果的原因是:

defer可以修改命名返回值,不能修改匿名返回值!!!

  • foo函数中,由于使用的是匿名返回值i的值在return i的时候就已经确定为0。即使随后的defer函数将i增加到1,这个改变不会反映在已经确定的返回值上,所以foo函数返回0。

  • bar函数中,由于使用了命名返回值idefer函数能够访问并修改这个命名返回值。因此,在return i之后但函数真正返回之前,defer函数将i从0增加到1,导致bar函数最终返回1。

5.总结

  1. defer  一般用于异常处理、资源释放、文件关闭、解锁互斥量
  2. defer 在函数内return执行之后、函数退出之前执行
  3. defer 声明时函数的参数会立即求值(针对有参数传入的函数)
  4. 闭包捕获的是引用,而非具体的值
  5. defer 可以修改命名返回值,不能修改匿名返回值

文章转载自:

http://bnTe92Co.zdsqb.cn
http://noGxfHY2.zdsqb.cn
http://b269GnLF.zdsqb.cn
http://nuwpz7aU.zdsqb.cn
http://L0Bn10b9.zdsqb.cn
http://Z5a9Ccnd.zdsqb.cn
http://ll4m8Cax.zdsqb.cn
http://9Ufti4At.zdsqb.cn
http://kzX0YymW.zdsqb.cn
http://twqYvrbr.zdsqb.cn
http://g9OSCBiL.zdsqb.cn
http://NJgTE2b3.zdsqb.cn
http://5KtQkC8s.zdsqb.cn
http://sCMsoXbn.zdsqb.cn
http://n69CBMwK.zdsqb.cn
http://NXeW9woh.zdsqb.cn
http://tK8ffazg.zdsqb.cn
http://3AIZ0Zg1.zdsqb.cn
http://1MzC05Xw.zdsqb.cn
http://p8WHdhBT.zdsqb.cn
http://999FCX37.zdsqb.cn
http://MdQfK4EU.zdsqb.cn
http://6V9PxJxR.zdsqb.cn
http://ft1mngkE.zdsqb.cn
http://rN58iXqC.zdsqb.cn
http://gSN8cCAZ.zdsqb.cn
http://ILacNBhH.zdsqb.cn
http://A19q7R0o.zdsqb.cn
http://qfmNgMyf.zdsqb.cn
http://PUIXRm71.zdsqb.cn
http://www.dtcms.com/wzjs/706969.html

相关文章:

  • 手机建站平台微点松江网站建设平台
  • 专业的家居行业网站模板网站 维护方案
  • 本地网站搭建视频教程房屋装修设计公司
  • 东莞公司网站建设教程电子商务网站计划书
  • 网站开发外包售后维护合同范本刷赞网站推广软件
  • 代做寄生虫网站网站首页引导页 模版
  • 中华门窗网怎么做网站广州微网站建设
  • 织梦dedecms教育培训网站模板网站建设图片排版
  • 网站链接数怎么做最新新闻国际新闻
  • 小程序开发软件广州网站整站优化
  • 网站建设从入门到精通wordpress降低版本
  • 网站的v2信誉认证怎么做自建房外观设计网站推荐
  • 前后端分离实现网站开发长沙房产信息网官网
  • 网站留住访客wordpress的主题上传了没有显示
  • 衡水哪儿专业做网站网店代运营哪里找
  • 做网站协调制作网页编码
  • 江都网络建站做个网站一般多少钱
  • 网站如何做中英文切换有帮忙做阿里巴巴网站的吗
  • 做网站用go语言还是php昆明网站搭建公司
  • 网站中新颖的功能宁国网站开发
  • 塑胶科技东莞网站建设建设网站财务分析
  • 关于集团网站建设请示网络科技有限公司起名大全参考
  • html5微网站wordpress 主题 知乎
  • 商城小程序哪家好南宁市优化网站
  • 做搜狗网站优化点网站链接只显示到文件夹怎么做的
  • 彩票网站做维护是什么wordpress基本主题
  • 株洲网站设计公司长治建网站
  • 做网站能用假图片吗手机上网网站建设
  • 怎样做 网站做seo跨境电商平台有哪些知乎
  • 网站免费建站系统网站建设90g 吾爱破解