English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Golang 基礎チュートリアル

Golang 控制文

Golang 関数 & メソッド

Golang 構造体

Golang スライス & 配列

Golang 文字列(String)

Golang ポインタ

Golang インターフェース

Golang 并行

Golang エラ(Error)

Golang 他の雑多なもの

Go Deferキーワード

Go言語では、defer文は遅延されます。関数またはメソッドアノニマスメソッドの実行は、近くの関数が戻るまで遅延されます。つまり、遅延した関数やメソッドの呼び出しはすぐに評価されますが、近くの関数が戻るまで実行されます。deferキーワードを使用して遅延されたメソッド、関数、またはアノニマス関数を作成できます。

文法:

// 関数
defer func func_name(parameter_list Type) return_type{
    // コード
}
// メソッド
defer func (receiver Type) method_name(parameter_list){
    // コード
}
defer func (parameter_list)(return_type){
    // コード
}

注意事項:

  • Go言語では、同じプログラム内で複数のdefer文が使用可能で、それらはLIFO(後進先出)順序で実行されます。例えば、以下の通りです。2と示されています。

  • defer文では、defer文が実行されたときに(呼び出されたときではなく)引数が評価されます。

  • defer文は、ファイル処理が完了した後にファイルを閉じる、チャネルを閉じる、またはプログラム中の緊急事態をキャッチするために通常使用されます。

この概念を説明するために例を用いて議論しましょう:

例1:

package main
import "fmt"
// 関数
func mul(a1, a2 int) int {
    res := a1 * a2
    fmt.Println("結果: ", res)
    return 0
}
func show() {
    fmt.Println("ハイ!、ja.oldtoolbag.com Go言語基本チュートリアル")
}
func main() {
    //mul()関数を呼び出します
    //ここでのmul関数の動作は
    //通常の関数のように
    mul(23, 45)
    //mul()関数を呼び出します
    //deferキーワードを使用して
    //ここにmul()関数があります
    //は遅延関数
    defer mul(23, 56)
    //show()関数を呼び出します
    show()
}

出力:

結果:  1035
ハイ!、ja.oldtoolbag.com Go言語基本チュートリアル
結果:  1288

使用法説明:上記の例では、2つの同じ名前のmul()およびshow()関数の関数。その中でshow()関数は通常main()関数内で呼び出し、同時に2つの異なる方法で呼び出しますmul()関数:

  • まず、通常の関数のように呼び出しますmul関数、つまりmul(23,45)を関数呼び出し時に実行(出力:Result:1035)。

  • 次に、deferキーワードを使用してmul()関数はdefer関数と呼ばれ、つまりdefer mul( 23,56),すべての周囲のメソッドが戻ったときに実行される(出力:Result:1288)。

例2:

package main 
  
import "fmt"
  
// 関数
func add(a1, a2 int) int { 
    res := a1 + a2 
    fmt.Println("結果: ", res) 
    return 0 
} 
  
func main() { 
  
    fmt.Println("スタート") 
  
    //複数の遅延ステートメント
    //LIFO順序で実行
    defer fmt.Println("エンド") 
    defer add(34, 56) 
    defer add(10, 10) 
}

出力:

スタート
結果:  20
結果:  90
終わり