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

重新下载一个微信seo培训公司

重新下载一个微信,seo培训公司,承德网站建设流程,租服务器空间Go的defer语句用来调度一个函数调用(被延期的函数),使其在执行defer的函数即将返回之前才被运行,被延期执行的函数,它的参数(包括接受者)实在defer执行的时候被求值的,而不是在调用执行的时候。…

    Godefer语句用来调度一个函数调用(被延期的函数),使其在执行defer的函数即将返回之前才被运行,被延期执行的函数,它的参数(包括接受者)实在defer执行的时候被求值的,而不是在调用执行的时候。也就是说被延期执行的函数的参数是按正常顺序被求值的。

    defer会按逆序执行

    deferGo语言提供的关键字,常用来释放资源,会在函数返回之前进行调用。如果有多个defer表达式,调用顺序类似于栈,越后面的defer表达式越先被调用。defer 函数调用的执行时机是外层函数设置返回值之后并且在即将返回之前

 

1

 

func main() {
         for i:=;i<5;i++{
              defer fmt.Printf("%d",i)
              fmt.Println("bbbbb")
         }
         fmt.Println("aaaaa")
}

 

执行结果:

bbbbb

bbbbb

bbbbb

bbbbb

bbbbb

aaaaa

43210

 

2

func trace(s stringstring {
       fmt.Println("entering:",s)
       return s
}

func un(s string) {
       fmt.Println("leaving:",s)
}

func a() {
       defer un(trace("a"))
       fmt.Println("in a")
}

func b() {
       defer un(trace("b"))
       fmt.Println("in b")
       a()
}

 

func main() {
       b()
}

 

 

执行结果如下:

entering: b

in b

entering: a

in a

leaving: a

leaving: b

 

 

 例3

func f1() (result int) {
       defer func() {
              result++
       }()
       return 0
}

func f2() (r int) {
       t := 5
       defer func() {
              t = t+5
       }()
       return t
}


func f3() (t int) {
       t = 5
       defer func() {
              t = t+5
       }()
       return t
}


func f4() (r int) {
       defer func(r int) {
              r = r + 5
       }(r)
       return 1
}

 

要使用defer不踩坑,最重要的一点就是明白,return xxx不是一条原子指令

 

函数返回的过程是这样子的:先给返回值赋值,然后调用defer表达式,最后才是返回到调用函数中。

defer表达式可能会在设置函数返回值之后,在返回到调用函数之前,修改返回值,使最终的函数返回值与你想象的不一致。

 

可以将return xxx改成

返回值=xxx

调用defer函数

空的return

 

 

 

3可以改写成这样

func f11() (result int) {
       result = 0   //先给返回值赋值
       func(){               //再执行defer 函数
              result++
       }()
       return                //最后返回
}

func f22() (r int) {
       t := 5
       r = t //赋值指令
       func(){   //defer 函数被插入到赋值与返回之间执行,这个例子中返回值r没有被修改
              t = t+5
       }
       return   //返回
}

func f33() (t int) {
       t = 5    //赋值指令
       func(){
              t = t+5  //然后执行defer函数,t值被修改
       }
       return
}

func f44() (r int) {
       r = 1    //给返回值赋值
       func(r int){   //这里的r传值进去的,是原来rcopy,不会改变要返回的那个r
              r = r+5
       }(r)
       return
}

 

参考:《Effective Go》、《深入解析go内核实现》

http://www.wooajung.com/news/34907.html

相关文章:

  • 罗湖网站建设优化精准营销的三要素
  • 马蜂窝网站怎么做网络广告投放方案
  • 中国建设官网首页汕头seo不错
  • 宝鸡专业做网站百度seo标题优化软件
  • 简历旅游网站开发经验百度app下载官方免费下载最新版
  • 怎么用电脑windows做网站杭州搜索推广公司
  • 学校网站建设的优势和不足新闻博客软文自助推广
  • iis网站无法启动网络营销技能大赛优秀作品
  • 上海哪个区买房最好百度seo
  • 自己做网站步骤广告买卖网
  • 海报图片素材win优化大师官网
  • easyui做门户网站网站优化外包价格
  • 企业网站建站 广州 视频360地图怎么添加商户
  • 网站正在建设中中文网站安全检测平台
  • asp新闻发布网站模板怎么建网站教程图解
  • 深圳燃气公司上班时间seo顾问张智伟
  • 人才网站建设方案网店seo名词解释
  • 网站建设788gg网站seo查询站长之家
  • 网站开发时遇不到算法今日十大热点新闻事件
  • 昆明网站建设系统今日国内新闻大事件
  • 水资源论证网站建设公众号怎么推广
  • 建立一个公司的网站seo关键词排名优化价格
  • 福建石狮有做网站的没地推团队如何收费
  • ui做的好的网站有哪些网页设计是干嘛的
  • 建站用什么平台好武汉seo顾问
  • 西安做网站优化的公司百度账号登录不了
  • 河间市做网站价格网站seo主要是做什么的
  • 常州外贸集团 网站建设百度搜索量查询
  • 宁波中科网站建设有限公司长春网站排名提升
  • 找人做网站注意什么问题怎么做百度推广运营