go 延迟函数 defer

defer 语句用于延迟调用指定的函数
比如:

func outerFunc()  {
    defer fmt.Println("defer 执行")
    fmt.Println("第一个被打印")
}

defer 语句最后才会被执行

func printNumbers()  {
    for i :=0 ; i < 5; i++ {
        defer func() {
            fmt.Println(i)
        }()
    }
}

会打印55555
延迟函数执行时i已经=5了

func printNumbers1() {
for i :=0 ; i < 5; i++ {
defer func(n int) {
fmt.Println(n)
}(i)
}
}
会打印43210
延迟函数有了传入参数,就会打印传入的参数

原文地址:http://blog.51cto.com/13990437/2314312

时间: 2024-10-12 23:34:38

go 延迟函数 defer的相关文章

Golang入门教程(十三)延迟函数defer详解

前言 大家都知道go语言的defer功能很强大,对于资源管理非常方便,但是如果没用好,也会有陷阱哦.Go 语言中延迟函数 defer 充当着 try...catch 的重任,使用起来也非常简便,然而在实际应用中,很多 gopher 并没有真正搞明白 defer.return.返回值.panic 之间的执行顺序,从而掉进坑中,今天我们就来揭开它的神秘面纱!话不多说了,来一起看看详细的介绍吧. 基本介绍 延时调用函数的语法如下: defer func_name(param-list) 当一个函数调用

go defer (go延迟函数)

go defer (go延迟函数) Go语言的defer算是一个语言的新特性,至少对比当今主流编程语言如此.根据GO LANGUAGE SPEC的说法: A "defer" statement invokes a function whose execution is deferred to the moment the surrounding function returns, either because the surrounding function executed a re

Jquery延迟函数

1.setInterval(function(){},[time]) 示例:这是一个模拟进度条的代码,结束后转向另一页面. <script type="text/javascript"> $(function () { var i = 0; var t = 0; setInterval(function () { if (i < 100) { i = i + 5; t++; $("#linepercent").css("height&qu

延迟函数 比sleep效果好

sleep是会阻塞线程的 网上有些延迟函数测试下来还是会阻塞,而接下来推荐的代码则不会 1 2 3 4 5 6 7 8 9 procedure delay(dwMilliseconds:integer); var firsttickcount: longint; begin firsttickcount := gettickcount; repeat application.processmessages; until ((gettickcount - firsttickcount) >= lo

js的延迟脚本----defer与异步脚本----async

延迟脚本----defer: 一般而言,js的引入<script></script>被放在body的结束符之前,这主要是为了让页面的所有节点被加载完了之后在执行js代码,防止js获取dom节点失败的情况出现. 如果你一定要将<script></script>放在head中,又担心无法获取到dom节点的话,可以如以下代码形式定义延迟脚本defer: <script type="text/javascript" defer="

Go-延时函数defer

关于延时调用函数(Deferred Function Calls)      延时调用函数基本语法如下: defer func_name(param-list) {} 当一个函数前有关键字 defer 时,那么这个函数执行会被推迟到包含这个 defer 语句的函数即将返回前才执行, 如下示例: package main import "fmt" func main() { defer fmt.Println("Fourth") fmt.Println("F

闭包应用之延迟函数setTimeout

根据HTML 5标准,setTimeout推迟执行的时间,最少是5毫秒.如果小于这个值,会被自动增加到5ms. 每一个setTimeout在执行时,会返回一个唯一ID,把该ID保存在一个变量中,并传入clearTimeout,可以清除定时器. 在setTimeout内部,this绑定采用默认绑定规则,也就是说,在非严格模式下,this会指向window:而在严格模式下,this指向undefined. 一.用setTimeout代替setInterval 由于setInterval间歇调用定时器

unity3D延迟函数

1.Invoke(string methodName,float time) 在一定时间调用methodName函数 using UnityEngine; using System.Collections; public class example : MonoBehaviour { 函数 public void Awake() { Invoke("函数名",时间); } } 2.InvokeRepeating(string methodName,float time,float re

延迟函数

var delayFn={ flag:+new Date().getTime(), mt:null, set:function(fn,delaytime){ var self=this, now=+new Date().getTime(), fc=now-self.flag; (fc>delaytime)&&(clearTimeout(self.mt),self.mt=window.setTimeout(function(){fn.call(null)},500),self.flag