iT邦幫忙

4

蠻可愛的golang #24

  • 分享至 

  • xImage
  •  

今天介紹 defer, 這是Golang引進的新指令,C是沒有的.
先看以下的範例.

// hello28
package main

import (
	"fmt"
)

func main() {
	defer Function3()
	Function1()
}

func Function1() {
	fmt.Println("Function1 開始")
	defer Function2()
	fmt.Println("Function1 結束")
}

func Function2() {
	fmt.Println("Function 2")
}

func Function3() {
	fmt.Println("Function 3")
}

執行結果:

$ ./hello28 
Function1 開始
Function1 結束
Function 2
Function 3

說明一下: 在Main()中,雖然先呼叫 Function3(), 但是前面有加defer,
所以會延遲執行,當要離開Main()的時候,才會執行.
在Function1(),也是用defer的方式,呼叫Function2(),也一樣延遲執行,當要離開Function1()的時候,才會執行.
所以最終的執行順序,就會像上面的結果.
在後面介紹到檔案操作時,還會看到defer, 一般程式語言的方式,
要記得最後補上close(), 資深的人員,會在寫open()時,就馬上寫一個
close(),然後將操作過程寫在兩者之間,以避免漏關檔案,但這樣的方式
,畢竟還是會有失誤的機會.
而Golang引進defer的方式,我們可以在寫open()之後,馬上寫
defer close(), 接著寫操作,也不用擔心,修修改改時,把close()誤刪了.


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言