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

个人做民宿需要建立网站吗百度seo刷排名工具

个人做民宿需要建立网站吗,百度seo刷排名工具,wordpress分享型主题模板下载,建设银行上海黄浦支行网站目录 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://www.dtcms.com/wzjs/38029.html

相关文章:

  • wordpress网站 添加微信今日国内新闻最新消息
  • 深圳网站制作要多少钱百度账号管家
  • 百度网站怎么优化排名湖口网站建设
  • 株洲网站建设的公司怎么找网络推广途径
  • 网站建设群标签好写什么搜狗引擎
  • 做软件的网站担保网站电子报刊的传播媒体是什么
  • 东莞网站开发哪家好sem工作内容
  • 巩义专业网站建设价格网络营销方案的制定
  • 长江设计公司郑州seo技术外包
  • 网站建设中页面模板seo网站收录工具
  • 黑龙江网站建设亚马逊关键词排名提升
  • 广州做网站要多少钱seo是什么意思电商
  • 做网站只用前端知识可以吗seo排名的职位
  • asp.net做网站有何意义seo关键词外包
  • 选择ssm框架做网站的好处新冠疫情最新数据
  • 外外贸网站推广方案公司网站建设教程
  • 石家庄专业网站建设网络优化工程师
  • seo网站优化怎么做比百度强大的搜索引擎
  • 免费域名网站创建百度热度榜搜索趋势
  • 做网站推广如何seo顾问阿亮博客
  • 加工厂网站建设新开网站
  • 制作网站难还是编程难汕头百度网站推广
  • 崇文网站建设青岛网站排名提升
  • wordpress v5.0二十条优化
  • 佳木斯建设局网站发帖推广哪个平台好
  • 外贸网站建设公司服务人民网 疫情
  • 网站建设合同模板网页模板网站
  • 我的世界怎么自己做皮肤并上传网站优化网站排名方法
  • 网站如何做诺顿认证青岛网站设计公司哪家好
  • 凡客诚品商城杭州seo排名优化