型抽出
code:go
1. Type Switch(型スイッチ)での使用
switch errors.Cause(err).(type) {
case *ValidationError:
// バリデーションエラーの処理
case *DatabaseError:
// データベースエラーの処理
default:
// その他のエラーの処理
}
2. 型アサーション(通常の型抽出)
// 正しい書き方
if validationErr, ok := errors.Cause(err).(*ValidationError); ok {
// ValidationError型として使用
fmt.Println(validationErr.Field)
}
code:go
// 型アサーションの構文
// 戻り値を特定の型として扱う時に使用
// result, ok := 式.(型)
value, ok := expr.(Type)
// 実際の使用例
value, ok := user.Name.(string)
value, ok := getUserById(123).(*User)
value, ok := errors.Cause(err).(*ValidationError)
value, ok := (10 + 20).(int) // これは無意味だが文法的には正しい