Golang関数でキーワードdeferとrecoverを一緒に使用する方法
Golang は、もともと Google によって開発され、2009 年に初めてリリースされた、効率的で簡潔で学びやすいプログラミング言語です。プログラマーの生産性とコードの明瞭さを向上させるように設計されています。 Golang では、プログラム内で発生する可能性のあるエラーを処理するために、関数キーワード defer とcover がよく一緒に使用されます。この記事では、これら 2 つのキーワードの使用法を紹介し、いくつかの例を通して実際の応用例を説明します。
1. defer の使用方法
defer はキーワードであり、関数の実行後に特定のコードの実行を遅らせるために使用されます。遅延実行とは、関数が戻る前に、これらのコードがスタックに追加され、次々に実行されることを意味します。
defer ステートメントの構文は次のとおりです。
defer function_name(argument)
ここで、function_name は遅延する必要がある関数の名前、引数は次のとおりです。はオプションのパラメータリストです。関数の実行が完了し、return ステートメントが実行されると、すべての defer ステートメントが順番に実行されます。
次は、defer ステートメントの具体的な使用法を示すサンプル プログラムです。
package main import "fmt" func main() { defer fmt.Println("Hello") fmt.Println("World") }
このプログラムは、 fmt.Println("World " を実行した後、「World
Hello」を出力します。 )、プログラムは defer ステートメントを実行し、それをスタックに追加します。 main() 関数が戻ると、スタックが順番にポップされ、最後に実行されるのは defer ステートメント内の print ステートメントです。
2. リカバリの使用方法
プログラムでエラーが発生すると、プログラムは実行を停止して終了します。ただし、場合によっては、プログラムの実行を継続してエラーを処理したい場合もあります。 Golang では、recover キーワードを使用してこれを実現できます。
recover は、パニックから回復するために使用される defer ステートメントでのみ使用される組み込み関数です。プログラムがパニックになると、実行を強制的に停止し、defer ステートメントで回復関数を呼び出すことでプログラムの実行を再開します。
以下は、recover ステートメントの具体的な使用法を示すサンプル プログラムです。
package main import ( "fmt" "os" ) func main() { defer func() { if r := recover(); r != nil { fmt.Println("Recovered:", r) } }() fmt.Println("Start") panic("Something wrong") fmt.Println("End") os.Exit(0) }
このプログラムでは、main() 関数の defer ステートメントで Recovery 関数を使用します。 defer ステートメント内の匿名関数は、パニックが発生するかどうかを判断し、関連情報を出力し、パニックが発生した場合にはプログラムの実行を再開します。
このプログラムを実行すると、最初に「Start」という出力が表示され、その後プログラムはパニックをスローし、実行制御フローが中断され、print ステートメントは実行されません。ただし、recover関数を使用してプログラムの実行を再開するため、プログラムが終了する前に「Recovered:Something lower」が出力されます。
3. deferとrecoverの併用
実際のプログラミングでは、deferとrecoverは併用するのが一般的です。たとえば、操作が失敗したときにプログラムをロールバックする必要がある場合、操作の開始前にトランザクションを作成し、操作の完了後にトランザクションをコミットできますが、操作が失敗した場合は、defer ステートメントを使用して操作をロールバックできます。同時に、異常なエラーが発生した場合は、リカバリ機能を使用してプログラムの実行を再開し、特定の操作を実行できます。
以下はデータベース操作に関するサンプル プログラムで、遅延と回復がどのように併用されるかを示しています。
package main import ( "database/sql" "fmt" "log" _ "github.com/go-sql-driver/mysql" ) func main() { db, err := sql.Open("mysql", "username:password@tcp(host:port)/database") if err != nil { log.Fatal(err) } defer db.Close() tx, err := db.Begin() if err != nil { log.Fatal(err) } defer func() { if r := recover(); r != nil { fmt.Println("Transaction Rollback:", r) tx.Rollback() } }() _, err = tx.Exec("INSERT INTO users(name) VALUES (?)", "Alice") if err != nil { panic(err) } _, err = tx.Exec("INSERT INTO users(name) VALUE (?)", "Bob") if err != nil { panic(err) } err = tx.Commit() if err != nil { panic(err) } }
このプログラムでは、操作を開始する前にデータベース接続を開いて作成します。取引。プログラムの実行中に異常なエラーが発生すると、パニックが発生し、プログラム制御フローはただちに無名関数の defer ステートメントの実行に移行します。このステートメントでは、recover 関数を使用してプログラムの通常の実行を復元し、トランザクションのロールバックを実行します。
プログラムが正常に実行されると、トランザクションがコミットされ、データベース接続が閉じられます。異常なエラーが発生すると、エラー メッセージが出力された後にトランザクションがロールバックされ、データベース接続が閉じられ、プログラムが終了します。
4. 概要
defer とcover は Golang の重要なキーワードであり、プログラムで発生する例外エラーを処理するためによく使用されます。 defer キーワードを使用すると、関数の実行後に特別な処理が必要なコードの実行を遅らせることができます。プログラムで異常なエラーが発生した場合、recover キーワードを使用してプログラムの実行を再開し、エラーを処理できます。実際のプログラミングでは、これら 2 つのキーワードを組み合わせて使用することで、プログラム内で発生する可能性のある異常事態に対処し、プログラムの安定性と信頼性を確保することができます。
以上がGolang関数でキーワードdeferとrecoverを一緒に使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Go ではファイルを安全に読み書きすることが重要です。ガイドラインには以下が含まれます。 ファイル権限の確認 遅延を使用してファイルを閉じる ファイル パスの検証 コンテキスト タイムアウトの使用 これらのガイドラインに従うことで、データのセキュリティとアプリケーションの堅牢性が確保されます。

Go データベース接続の接続プーリングを構成するにはどうすればよいですか?データベース接続を作成するには、database/sql パッケージの DB タイプを使用します。同時接続の最大数を制御するには、MaxOpenConns を設定します。アイドル状態の接続の最大数を設定するには、ConnMaxLifetime を設定します。

GoLang フレームワークと Go フレームワークの違いは、内部アーキテクチャと外部機能に反映されています。 GoLang フレームワークは Go 標準ライブラリに基づいてその機能を拡張していますが、Go フレームワークは特定の目的を達成するための独立したライブラリで構成されています。 GoLang フレームワークはより柔軟であり、Go フレームワークは使いやすいです。 GoLang フレームワークはパフォーマンスの点でわずかに優れており、Go フレームワークはよりスケーラブルです。ケース: gin-gonic (Go フレームワーク) は REST API の構築に使用され、Echo (GoLang フレームワーク) は Web アプリケーションの構築に使用されます。

JSON データは、gjson ライブラリまたは json.Unmarshal 関数を使用して MySQL データベースに保存できます。 gjson ライブラリは、JSON フィールドを解析するための便利なメソッドを提供します。json.Unmarshal 関数には、JSON データをアンマーシャリングするためのターゲット型ポインターが必要です。どちらの方法でも、SQL ステートメントを準備し、データをデータベースに永続化するために挿入操作を実行する必要があります。

ベスト プラクティス: 明確に定義されたエラー タイプ (エラー パッケージ) を使用してカスタム エラーを作成する 詳細を提供する エラーを適切にログに記録する エラーを正しく伝播し、非表示または抑制しないようにする コンテキストを追加するために必要に応じてエラーをラップする

FindStringSubmatch 関数は、正規表現に一致する最初の部分文字列を検索します。この関数は、最初の要素が一致した文字列全体で、後続の要素が個々の部分文字列である、一致する部分文字列を含むスライスを返します。コード例: regexp.FindStringSubmatch(text,pattern) は、一致する部分文字列のスライスを返します。実際のケース: 電子メール アドレスのドメイン名を照合するために使用できます。たとえば、email:="user@example.com", pattern:=@([^\s]+)$ を使用してドメイン名を照合します。 [1]。

Go フレームワークで一般的なセキュリティ問題に対処する方法 Web 開発で Go フレームワークが広く採用されているため、そのセキュリティを確保することが重要です。以下は、一般的なセキュリティ問題を解決するための実践的なガイドであり、サンプル コードも含まれています。 1. SQL インジェクション SQL インジェクション攻撃を防ぐには、プリペアド ステートメントまたはパラメータ化されたクエリを使用します。例: constquery="SELECT*FROMusersWHEREusername=?"stmt,err:=db.Prepare(query)iferr!=nil{//Handleerror}err=stmt.QueryR

バックエンド学習パス:フロントエンドからバックエンドへの探査の旅は、フロントエンド開発から変わるバックエンド初心者として、すでにNodeJSの基盤を持っています...
