0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Go辞書 defer

Last updated at Posted at 2023-06-26

deferステートメントの使い方:

deferキーワードの後に実行したい関数呼び出しを書きます。
この関数呼び出しは、現在のスコープ内の最後のステートメントとして実行されます。
deferステートメントは、関数内で複数回使用することができます。順番に登録された順序で実行されます。

deferの動作:

deferで指定した関数呼び出しは、実際には遅延され、関数の終了時に実行されます。
関数の終了時に実行されるため、関数内でエラーが発生しても、deferで指定した処理は必ず実行されます。

deferの適用範囲:

deferは、関数内のどこででも使用することができます。
ループ内や条件分岐内など、任意の場所でdeferステートメントを使用することができます。
deferステートメントは、関数が終了するまで実行を遅延させるため、ループ内の各イテレーションで実行されます。

deferの主な用途:

リソースの解放: deferを使用して、ファイルのクローズ、データベースの接続の解放、ミューテックスのロック解除など、リソースの解放を確実に行うことができます。
後処理の実行: 関数が終了する前に、必要な後処理を実行するためにdeferを使用することができます。
ログの出力: deferを使用して関数の終了時にログメッセージを出力することができます。
deferは、関数内でのリソース管理や後処理を簡潔かつ正確に行うための有用な機能です。特に、リソースの解放や後処理が必要な場合に活用されます。

[deferステートメントの例]

ファイルのクローズ:

func ReadFile() {
file, err := os.Open("filename.txt")
if err != nil {
// エラーハンドリング
return
}
defer file.Close() // 関数終了時にファイルをクローズする
// ファイルの読み込み処理
}

ミューテックスのロック解除:

var mu sync.Mutex

func DoSomething() {
mu.Lock()
defer mu.Unlock() // 関数終了時にミューテックスのロックを解除する
// 処理の実行
}

リソースの解放:

func ProcessData() {
resource := allocateResource()
defer releaseResource(resource) // 関数終了時にリソースを解放する
// リソースを使用した処理
}

func allocateResource() *Resource {
// リソースの割り当て処理
}

func releaseResource(resource *Resource) {
// リソースの解放処理
}

ログの出力:

func DoSomething() {
defer log.Println("Function execution completed") // 関数終了時にログメッセージを出力する
// 処理の実行
}
これらの例では、deferステートメントを使用して関数の終了時に特定の処理を実行しています。deferを使用することで、リソースの解放や後処理を忘れることなく確実に行うことができます。また、deferを使うことでコードがよりシンプルになり、可読性が向上します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?