Day13# defer

第 13 天要介绍 defer 是什麽,那麽我们就进入正题吧 ─=≡Σ(((っ゚∀゚)っ

defer

defer 是 Go 内建的函式,执行的时间点会在 function 要回传前被执行。

package main

import "fmt"

func main() {
	defer fmt.Println("World")

	fmt.Println("Hello")
}

// => Hello
//    World

虽然 defer 是最後才执行,但是他接收到参数的时间点还是跟程序码执行的顺序有关:

package main

import "fmt"

func main() {
	cat := "BuiBui"
	defer fmt.Println(cat)

	cat = "MeiMei"
	fmt.Println("Which cat?")
}

// => Which cat?
//    BuiBui

最後得到的 cat 是 BuiBui,由此可以确定 defer 会先接完参数,再等到 function 结束前才执行。

最後 defer 的一个特点是 last-in-first-out,一般执行方法都会先呼叫的先执行,但在 defer 会是最後呼叫的先执行:

package main

import "fmt"

func main() {
	cat := "BuiBui"
	defer fmt.Println(cat)

	cat = "MeiMei"
	defer fmt.Println(cat)
}
// => MeiMei
//    BuiBui

如果用回圈执行看看:

package main

import "fmt"

func main() {
	fmt.Println("Go!")

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

	fmt.Println("Done!")
}
// => Go!
//    Done!
//    4
//    3
//    2
//    1
//    0

结尾

defer 的介绍就到此结束,有任何问题都欢迎与我告知 :)
本篇文章同步发布於我的部落格


<<:  【第二十八天 - 系统设计 介绍】

>>:  Day23:Hot Flow - StateFlow

Day26 - this&Object Prototypes Ch3 Objects - Review

Object content Imutability Object constant 将指定的 p...

[Day-02] - Annotation Modulize Introduction

Abstract Annotation的技术风格为Java 5 之後所推畅出来的新模式,并将注解区分...

【Day14】数据展示元件 - Card

元件介绍 Card 是一个可以显示单个主题内容及操作的元件,通常这个主题内容包含图片、标题、描述或是...

Python & SQLALchemy 学习笔记_资料表的建立

纪录了一下学习 SQLALchemy 的过程,如果有错误再请各位大神指教 一、套件安装 pip in...

Day 7 网路宝石:【Lab】VPC外网 Public Subnet to the Internet (IGW) (上)

今天我们要示范如何让一个在 Public Subnet 里面的 EC2 instance 可以与 ...