go言語入門学習サイト

go言語初心者のために基礎から解説します。

Go言語のdefer文をコードで動かす。

Go言語のdeferは指定した部分の処理を遅らせる処理です。
一体どういう事を処理で見ていきます。


【理由】

defer 関数(またはメソッド)呼び出し
このような処理をすると指定部分の処理が後から呼び出されます。

実際に簡単なコードで見ていきましょう。

package main

import "fmt"

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

fmt.Println("hello")
}


hello
world

defer fmt.Println("world")が後から処理されます。
なので後からworldとなります。


【具体例】



package main

import "fmt"

func foo(x, y int) int {
defer fmt.Println(x + y)

x = x * x
y = y * y

return x + y
}

func main() {
fmt.Println(foo(1, 2))
}



3
5

defer fmt.Println(x + y)が後から処理されるので1が入った変数x同士かけ、2が入った変数y同士かけてdeferの部分で足したのがでるので3
5となります。




// 置き関数呼び出しはスタックにプッシュされます。関数が戻ると
// 延期された通話は、最後の最初の順序で実行されます。//
package main

import "fmt"

func main() {
fmt.Println("conting")

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

fmt.Println("done")
}





conting
done
9
8
7
6
5
4
3
2
1
0

先にcontingとdoneになります。

for i := 0; i < 10; i++ {
defer fmt.Println(i)
}
をすると通常とは逆に回数処理します。
10未満からなので9 8 7となります。




【結論】

基本的な使い方は
funcA1の中で funcB2の前に defer をつけると funcB2の実行を funcA1が終了するタイミングまで遅延することができます。




TechAcademy [テックアカデミー]


【アイデミー】AIを学んで一発逆転のキャリアチェンジ!



取材やお仕事紹介などはこちらからお気軽にご連絡下さい。
ysa7825@gmail.com