良い質問:なぜ、すべての外部キー関連のエラーを持っているなど何かをするという共通の「フレーズを」見つけることができません!これはgithub.com/lib/pq.Error
ですが、エラーサイトでfmt.Printf("%T\n", err)
を貼り付けて確認できます。この仮定を外すと、check the properties of this type:
type Error struct {
Severity string
Code ErrorCode
Message string
Detail string
Hint string
Position string
InternalPosition string
InternalQuery string
Where string
Schema string
Table string
Column string
DataTypeName string
Constraint string
File string
Line string
Routine string
}
クール!我々はErrorCode
のメンバーを持っているようです。 Postgres's error code list、23503 | foreign_key_violation
を確認できます。一緒にこのすべてを置く、それはあなたがこれを行うことができようになっています
const foreignKeyViolationErrorCode = ErrorCode("23503")
if err != nil {
if pgErr, isPGErr := err.(pq.Error); isPGErr {
if pgErr.ErrorCode != foreignKeyViolationErrorCode {
// handle foreign_key_violation errors here
}
}
// handle non-foreign_key_violation errors
}
注:あなたが扱うようにしようとしている1以外にも、「外部キー違反」の題目の下に他のエラー条件があるかもしれません。興味のある特定のエラーケースを絞り込むために、pq.Error
構造体の他のフィールドを調べることを検討してください。
log.Println(err)を実行してその内容を見ると、エラーの表示方法をカスタマイズすることもできます - https://blog.golang.org/error-handling-and-go –
[ Golang postgresエラー定数?](http://stackoverflow.com/questions/37560534/golang-postgres-error-constants) – icza
私はメッセージをチェックしませんが、エラー_code_です。 –