エラー処理と延期
Go では、defer ステートメントは、周囲の関数が戻った後に関数またはクリーンアップ操作を実行するためによく使用されます。ただし、defer 関数がエラーを返した場合、defer によって返されたエラーを無視するという一般的な慣行によりエラーが見落とされる可能性があり、予期しないシステム動作が発生する可能性があります。
次のシナリオを考えてみましょう。
OpenDbConnection(connectionString string, logSql bool) (*gorm.DB, error) { logger := zap.NewExample().Sugar() defer logger.Sync() }
この例では、logger.Sync() メソッドが無視されるエラーを返す可能性があり、潜在的な問題が未解決のままになります。
可能な戦略
名前付きエラー変数戦略を使用した例を次に示します。
func OpenDbConnection(connectionString string, logSql bool) (db *gorm.DB, err error) { logger := zap.NewExample().Sugar() defer func() { err = logger.Sync() }() // ... rest of function logic ... return db, err }
このアプローチでは、エラーは次のようになります。呼び出し関数でチェックおよび処理されます:
db, err := OpenDbConnection(connectionString, logSql) if err != nil { // Handle the error }
以上がGo で Defer によって返されたエラーを適切に処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。