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

站长工具查询入口大型企业网站源码

站长工具查询入口,大型企业网站源码,网站维护的意义,Wordpress要建数据库吗defer关键字 defer和go一样都是Go语言提供的关键字。defer用于资源的释放#xff0c;会在函数返回之前进行调用。一般采用如下模式#xff1a; f,err : os.Open(filename) if err ! nil {panic(err) } defer f.Close()如果有多个defer表达式#xff0c;调用顺序类似于栈会在函数返回之前进行调用。一般采用如下模式 f,err : os.Open(filename) if err ! nil {panic(err) } defer f.Close()如果有多个defer表达式调用顺序类似于栈越后面的defer表达式越先被调用。 不过如果对defer的了解不够深入使用起来可能会踩到一些坑尤其是跟带命名的返回参数一起使用时。在讲解defer的实现之前先看一看使用defer容易遇到的问题。 defer使用时的坑 先来看看几个例子。例1 func f() (result int) {defer func() {result}()return 0 }例2 func f() (r int) {t : 5defer func() {t t 5}()return t }例3 func f() (r int) {defer func(r int) {r r 5}(r)return 1 }请读者先不要运行代码在心里跑一遍结果然后去验证。 例1的正确答案不是0例2的正确答案不是10如果例3的正确答案不是6...... defer是在return之前执行的。这个在 官方文档中是明确说明了的。要使用defer时不踩坑最重要的一点就是要明白return xxx这一条语句并不是一条原子指令! 函数返回的过程是这样的 先给返回值赋值然后调用defer表达式最后才是返回到调用函数中。 defer表达式可能会在设置函数返回值之后在返回到调用函数之前修改返回值使最终的函数返回值与你想象的不一致。 其实使用defer时用一个简单的转换规则改写一下就不会迷糊了。改写规则是将return语句拆成两句写return xxx会被改写成: 返回值 xxx 调用defer函数 空的return先看例1它可以改写成这样 func f() (result int) {result 0 //return语句不是一条原子调用return xxx其实是赋值ret指令func() { //defer被插入到return之前执行也就是赋返回值和ret指令之间result}()return }所以这个返回值是1。 再看例2它可以改写成这样 func f() (r int) {t : 5r t //赋值指令func() { //defer被插入到赋值与返回之间执行这个例子中返回值r没被修改过t t 5}return //空的return指令 }所以这个的结果是5。 最后看例3它改写后变成 func f() (r int) {r 1 //给返回值赋值func(r int) { //这里改的r是传值传进去的r不会改变要返回的那个r值r r 5}(r)return //空的return }所以这个例子的结果是1。 defer确实是在return之前调用的。但表现形式上却可能不像。本质原因是return xxx语句并不是一条原子指令defer被插入到了赋值 与 ret之间因此可能有机会改变最终的返回值。 defer的实现 defer关键字的实现跟go关键字很类似不同的是它调用的是runtime.deferproc而不是runtime.newproc。 在defer出现的地方插入了指令call runtime.deferproc然后在函数返回之前的地方插入指令call runtime.deferreturn。 普通的函数返回时汇编代码类似 add xx SP return如果其中包含了defer语句则汇编代码是 call runtime.deferreturn add xx SP returngoroutine的控制结构中有一张表记录defer调用runtime.deferproc时会将需要defer的表达式记录在表中而在调用runtime.deferreturn的时候则会依次从defer表中出栈并执行。
http://www.tj-hxxt.cn/news/140651.html

相关文章:

  • asp网站的缺点怎样在百度上发表文章
  • node.js企业网站开发旅行社网站制作
  • 网站降权查下设计模板网站都有哪些
  • 网站的模板家谱网站怎么做
  • 服务器建立网站c++线上培训机构哪个好
  • 做注册任务的网站有哪些郑州做网站哪家最好
  • 网站建设注册密码咋弄国际域名注册网站
  • 四川省网站建设网站开发怎样
  • 留言网站怎么做网页设计与制作报告书
  • 怎样找回网站备案密码广东快速做网站公司
  • 合肥网站开发培训学校wordpress弹窗视频播放插件
  • 个人电脑做服务器网站中天建设第四网站
  • 谷歌搜索入口365贵阳哪家网站做优化排名最好
  • 手机什么app做网站湖南禹班建设集团网站
  • 网站的新闻栏与产品栏如何做办公用品网站建设策划书
  • 温室网站建设什么是网站建设策划
  • 深圳建站网站模板河北省住建和城乡建设厅网站
  • 佛山网站建设 骏域网站网站建设备案优化之看
  • 北京网站外包公司营销型网站建设原则
  • 网站建设子栏目文案保定市做网站
  • 网站404怎么做如何弄微信小程序店铺
  • 网站的回到顶部怎么做个人网页源码
  • 衡水专业网站设计旅游网站建设要求
  • 南京机关建设网站html遇到的问题及解决方法
  • 广州建设银行官方网站广东华迪工程建设监理公司网站
  • 网站开发属于技术合同公众号开发简单吗
  • 温州网站建设制作公司网页二级网站怎么做
  • wordpress网站名品传集团网站建设
  • 网站建设提供资料网站系统商城
  • 门头沟网站开发实验中心网站建设