Go 言語を使用した MySQL データベースでのデータ操作の事後検証

WBOY
リリース: 2023-06-17 12:45:07
オリジナル
1523 人が閲覧しました

インターネットの急速な発展とクラウド コンピューティングの普及に伴い、大規模なデータ処理がますます重要なテーマになっています。 MySQL データベースは、成熟したリレーショナル データベースとして、データ ストレージとデータ処理において重要な役割を果たします。

一部の複雑なビジネス シナリオでは、データベース操作に追加の処理を実行する必要があります。この操作は「事後検証」と呼ばれます。この記事では主に、いくつかのツールを使用して MySQL データベースのデータ操作の事後検証を Go 言語で実行する方法を紹介します。

1. 検証の概要

事後検証では、データベース データ操作の完了後に返された結果を検証して、データの整合性と正確性を確認できます。

  1. データ型の検証
    例: 入力データ型がデータベース内のフィールドの要件を満たしているかどうかを確認します。要件を満たしていない場合は、を実行すると、ユーザーは再入力するか破棄するかを尋ねられます。例外が発生しました。
  2. 制約検証
    例: 挿入するデータについて、テーブル内の FOREIGN KEY、UNIQUE、CHECK、NOT NULL などの制約条件を満たしているかどうかを確認します。満たしていない場合、ユーザーは変更するか破棄するように求められます。例外が発生しました。
  3. 整合性チェック
    例: 変更または削除するデータが存在するかどうかを確認します。存在しない場合は、ユーザーにプロンプ​​トを表示するか、例外をスローします。
  4. セキュリティ検証
    例: 管理者権限が必要な操作の場合、現在のユーザーにその操作を実行する権限があるかどうかを確認します。権限がない場合は、ユーザーにプロンプ​​トを表示するか、例外をスローします。

2. Go 言語を使用したデータ操作の事後検証

言語に付属する SQL パッケージは基本的なデータベース操作を提供しますが、事後検証は含まれていません。この記事では、事後検証を実装するために一般的に使用される 2 つの Go 言語ツールを紹介します。

  1. GORM ツール

GORM は、MySQL、PostgreSQL、SQLite、SQL サーバーをサポートする ORM ライブラリで、データベース操作をより便利かつ安全に実行できるようにします。モデル構造はテーブルとフィールドに注釈を付けることができ、これらの注釈は検証後のより多くの基礎を提供します。データを挿入または更新する前に、Preload() メソッドと Callbacks 関数を使用して、データベース上の GORM 操作のライフサイクルで実行するコードを追加できます。

たとえば、次のコードは、データ挿入に GORM を使用する方法を示しています。

import (
  "gorm.io/driver/mysql"
  "gorm.io/gorm"
)

type User struct {
  gorm.Model
  Name   string
  Age    uint8
  Email  string
}

func main() {
  dsn := "root:password@tcp(127.0.0.1:3306)/test_db?charset=utf8mb4&parseTime=True&loc=Local"
  db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
  if err != nil {
    panic("failed to connect database")
  }

  user := User{Name: "Leo", Age: 18, Email: "leo@example.com"}
  db.Create(&user)
}
ログイン後にコピー

上記のコードをより安全にするために、データの検証を実行する必要があります。たとえば、User 構造体の Name フィールドと Email フィールドに長さ制限を追加し、ユーザー入力が空かどうかを判断できます。データを挿入する前に、GORM の Callbacks 関数を使用して検証できます。

func (u *User) BeforeCreate(tx *gorm.DB) (err error) {
  if len(u.Name) == 0 || len(u.Name) > 50 {
    return errors.New("invalid user name")
  }
  if len(u.Email) == 0 || len(u.Email) > 50 {
    return errors.New("invalid email")
  }
  return
}

func main() {
  // Code ...
  user := User{Name: "Leo", Age: 18, Email: "leo@example.com"}
  if err := db.Create(&user).Error; err != nil {
    panic(err)
  }
}
ログイン後にコピー

ここで、BeforeCreate 関数は Create 操作の前の検証を示し、データが要件を満たしていない場合はエラーが返されます。作成操作は、データ検証に合格した後にのみ実行されます。

GORM は、コールバック関数を使用して、更新、削除、クエリ、その他の操作などの他のライフサイクルで検証を実行することもできます。このようにして、データを操作する前にデータをより注意深く検証できます。

  1. go-validator ツール

go-validator は Go 言語のデータ検証ライブラリであり、基本的なデータ型検証、正規表現検証、カスタマイズ バリデータをサポートしています。 go-validator を使用すると、ユーザーはデータ検証を実行する前に、データの型チェック、長さチェック、その他の操作を実行して、データの標準化と整合性を確保できます。

import (
  "github.com/asaskevich/govalidator"
)

type User struct {
  Name   string `valid:"required,stringlength(1|50)"`
  Age    int    `valid:"required,integer"`
  Email  string `valid:"required,email"`
}

user := User{Name: "Leo", Age: 18, Email: "leo@example.com"}
if _, err := govalidator.ValidateStruct(user); err != nil {
  panic(err)
}
ログイン後にコピー

上記のコードでは、有効なアノテーションを User 構造体に追加し、必要なデータ型、長さ制限、および必須かどうかを指定します。パラメーターを検証するときは、governor.ValidationStruct() 関数を呼び出すだけで済みます。

3. 概要

大規模なデータ処理を実行する場合、データの整合性と正確性が非常に重要です。 MySQL データベースを操作する前に、さまざまな不可解なエラーを回避するために、いくつかの事後検証を実行する必要があります。この記事ではGORMやgo-validatorなどのツールを使ってGo言語でポストバリデーションを行う方法を紹介しますので、皆様がMySQLデータベースを運用する際の参考になれば幸いです。

以上がGo 言語を使用した MySQL データベースでのデータ操作の事後検証の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート