Rumah  >  Artikel  >  pangkalan data  >  Pasca pengesahan operasi data dalam pangkalan data MySQL menggunakan bahasa Go

Pasca pengesahan operasi data dalam pangkalan data MySQL menggunakan bahasa Go

WBOY
WBOYasal
2023-06-17 12:45:071509semak imbas

Dengan perkembangan pesat Internet dan populariti pengkomputeran awan, pemprosesan data berskala besar telah menjadi topik yang semakin penting. Sebagai pangkalan data hubungan yang matang, pangkalan data MySQL memainkan peranan penting dalam penyimpanan data dan pemprosesan data.

Untuk beberapa senario perniagaan yang kompleks, kami perlu melakukan beberapa pemprosesan tambahan pada operasi pangkalan data ini dipanggil "pasca pengesahan". Artikel ini terutamanya memperkenalkan cara menggunakan beberapa alatan untuk melaksanakan pasca pengesahan operasi data pangkalan data MySQL dalam bahasa Go.

1. Gambaran Keseluruhan Pengesahan

Pasca pengesahan boleh mengesahkan keputusan yang dikembalikan selepas operasi data pangkalan data selesai untuk memastikan integriti dan ketepatan data. Ia boleh dibahagikan kepada aspek berikut:

  1. Pengesahan jenis data
    Contohnya: Sahkan sama ada jenis data input memenuhi keperluan medan dalam pangkalan data Jika tidak, gesa pengguna untuk masukkan semula atau buangnya.
  2. Pengesahan kekangan
    Contohnya: untuk data yang ingin anda masukkan, tentukan sama ada ia memenuhi KUNCI ASING, UNIK, SEMAK, BUKAN NULL dan syarat kekangan lain dalam jadual. Jika tidak, pengguna akan melakukannya digesa untuk mengubah suai atau membuangnya.
  3. Pengesahan integriti
    Contohnya: tentukan sama ada data yang akan diubah suai atau dipadamkan wujud, dan jika ia tidak wujud, gesa pengguna atau buang pengecualian.
  4. Pengesahan Keselamatan
    Contohnya: Untuk operasi yang memerlukan hak pentadbir, sahkan sama ada pengguna semasa mempunyai kuasa untuk melaksanakan operasi Jika tidak, gesa pengguna atau buang pengecualian.

2. Pengesahan pasca operasi data menggunakan bahasa Go

Pakej sql yang disertakan dengan bahasa tersebut menyediakan operasi pangkalan data asas, tetapi tidak termasuk pasca pengesahan. Artikel ini memperkenalkan dua alatan bahasa Go yang biasa digunakan untuk melaksanakan pasca pengesahan.

  1. Alat GORM

GORM ialah perpustakaan ORM yang menyokong MySQL, PostgreSQL, SQLite dan pelayan SQL, yang membolehkan kami melaksanakan operasi pangkalan data dengan lebih mudah dan selamat. Struktur Model boleh menganotasi jadual dan medan, dan anotasi ini boleh memberi kami lebih banyak asas untuk pengesahan selepas. Kita boleh menambah kod yang ingin kita laksanakan dalam kitaran hayat operasi GORM pada pangkalan data melalui kaedah Pramuat() dan fungsi Panggilan Balik sebelum memasukkan atau mengemas kini data.

Sebagai contoh, kod berikut menunjukkan cara menggunakan GORM untuk memasukkan data:

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)
}

Untuk menjadikan kod di atas lebih selamat, beberapa pengesahan data perlu dilakukan. Sebagai contoh, anda boleh menambah had panjang pada medan Nama dan E-mel dalam struktur Pengguna dan menentukan sama ada input pengguna kosong. Sebelum memasukkan data, anda boleh menggunakan fungsi Panggilan Balik GORM untuk mengesahkan.

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)
  }
}

Di sini, fungsi BeforeCreate menunjukkan pengesahan sebelum operasi Cipta Jika data tidak memenuhi keperluan, ralat akan dikembalikan. Operasi Cipta akan dilaksanakan hanya selepas pengesahan data berlalu.

GORM juga boleh menggunakan fungsi Panggilan Balik untuk melaksanakan pengesahan dalam kitaran hayat lain, seperti Kemas Kini, Padam, Pertanyaan dan operasi lain. Dengan cara ini, data boleh disahkan dengan lebih teliti sebelum mengendalikan data.

  1. alat go-validator

go-validator ialah perpustakaan pengesahan data untuk bahasa Go, menyokong pengesahan jenis data asas, pengesahan ungkapan biasa dan pengesah penyesuaian. Menggunakan go-validator, pengguna boleh melakukan semakan jenis, semakan panjang dan operasi lain pada data sebelum melakukan pengesahan data untuk memastikan penyeragaman dan integriti data.

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)
}

Dalam kod di atas, kami menambah anotasi yang sah pada struktur Pengguna dan menentukan jenis data yang diperlukan, had panjang dan sama ada ia diperlukan. Apabila mengesahkan parameter, anda hanya perlu memanggil fungsi gabenor.ValidationStruct().

3. Ringkasan

Apabila menjalankan pemprosesan data berskala besar, integriti dan ketepatan data adalah penting. Sebelum mengendalikan pangkalan data MySQL, kami perlu melakukan beberapa pengesahan pasca untuk mengelakkan pelbagai ralat yang tidak dapat dijelaskan. Artikel ini memperkenalkan kaedah menggunakan GORM dan go-validator dan alatan lain untuk pasca pengesahan dalam bahasa Go. Saya harap ia dapat membantu semua orang semasa mengendalikan pangkalan data MySQL.

Atas ialah kandungan terperinci Pasca pengesahan operasi data dalam pangkalan data MySQL menggunakan bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn