/ / Xác thực Go Struct bằng Govalidator

Xác thực Go Struct bằng Govalidator

Cấu trúc là một trong những loại dữ liệu chính và được sử dụng phổ biến được cung cấp trong ngôn ngữ lập trình Go. Nhiều gói trên nhiều chức năng khác nhau, từ gói cơ sở dữ liệu đến ORM và một số khung web sử dụng cấu trúc để phân tích cú pháp dữ liệu dễ dàng và các hoạt động khác.


Xác thực cấu trúc là một nhiệm vụ phổ biến trong Go và gói trình xác thực Go cung cấp một cách đơn giản và hiệu quả để xác thực các cấu trúc trong dự án của bạn.


Gói Trình xác thực Go là gì

bản xem trước github cho gói trình xác thực

Gói trình xác thực Go triển khai xác thực giá trị cho cấu trúc và các trường riêng lẻ dựa trên các thẻ được chỉ định trên khai báo cấu trúc.

Gói trình xác thực Go cung cấp các tính năng để xác thực trường chéo và cấu trúc chéo bằng cách sử dụng thẻ, lát, mảng và lặn bản đồ cho phép các mức xác thực trường đa chiều, xác thực trường tùy chỉnh, trích xuất tên trường được xác định tùy chỉnh, thông báo lỗi có thể tùy chỉnh và hỗ trợ cho khung Gin phổ biến làm trình xác thực mặc định cho gói.

Chạy một trong các lệnh này trong thiết bị đầu cuối của thư mục làm việc của bạn để cài đặt trình xác nhận bưu kiện.

 go get gopkg.in/go-playground/validator.v9
go get github.com/go-playground/validator/v10

Các phiên bản là hậu tố của URL. Lệnh đầu tiên cài đặt phiên bản 9 và lệnh thứ hai cài đặt phiên bản 10 của gói.

Sau khi cài đặt gói, bạn có thể nhập gói vào các dự án của mình tùy thuộc vào phiên bản bạn đã cài đặt.

 import (
    "gopkg.in/go-playground/validator.v9"
)

Bây giờ bạn có thể tiếp tục sử dụng gói trình xác thực Go. Nếu có bất kỳ vấn đề nào với quá trình cài đặt của bạn, hãy thử cài đặt lại/nâng cấp lên phiên bản Go mới nhất.

Xác thực cấu trúc với gói Trình xác thực

Bạn sẽ cần tạo một phiên bản của trình xác thực.Validate cấu trúc, hãy xác định cấu trúc bạn muốn xác thực bằng cách sử dụng thẻ xác thực để chỉ định quy tắc xác thực cho các trường.

Đây là cách bạn có thể tạo một phiên bản của trình xác thực.Validate cấu trúc.

 func main() {
    validate := validator.New()
}

Bạn có thể xác định một cấu trúc mà bạn muốn xác thực bằng cách chỉ định các thẻ cho các trường, từ đó thiết lập các quy tắc xác thực. Thẻ xác thực là chú thích đặc biệt của định nghĩa trường cấu trúc chỉ định các quy tắc.

Đây là một cấu trúc thông thường để xác nhận.

 type User struct {
    Name string
    Age int
    Email string
}

Đây là một ví dụ về cấu trúc, sẵn sàng để xác thực.

 type User struct {
    Name string `validate:"required"`
    Age int `validate:"gte=0,lte=130"`
    Email string `validate:"required,email"`
}

Trong ví dụ này, bạn đã chỉ định Tên trường theo yêu cầu khi khởi tạo, Tuổi trường phải lớn hơn hoặc bằng 0 và nhỏ hơn hoặc bằng 130 và E-mail trường là bắt buộc và phải là một địa chỉ email hợp lệ khi khởi tạo.

Các thẻ xác thực khác nhau có sẵn trong gói trình xác thực Go, bao gồm các thẻ cho các trường bắt buộc, giá trị tối thiểu và tối đa cũng như biểu thức chính quy. Bạn có thể tìm thấy danh sách đầy đủ các thẻ xác thực có sẵn trong tài liệu dành cho gói trình xác thực Go.

Khi bạn đã xác định cấu trúc mà bạn muốn xác thực và chỉ định các quy tắc xác thực cho từng trường, bạn có thể sử dụng cấu trúc phương pháp của trình xác thực.Validate struct để xác thực cấu trúc.

 user := User{
    
    Age: 3990000,
    Email: "john@example.com",
}

err := validate.Struct(user)
if err != nil {
    
}

Các cấu trúc phương thức trả về lỗi nếu tồn tại lỗi xác thực và bạn có thể xử lý lỗi dựa trên thao tác của mình.

Bạn có thể truy cập các lỗi này bằng cách sử dụng Lỗi xác thực phương pháp lỗi.

 if err != nil {
    for _, err := range err.(validator.ValidationErrors) {
        fmt.Println(err.Field(), err.Tag())
    }
}

Các Lỗi xác thực sẽ trả về tên của từng trường có lỗi xác thực và thẻ xác thực gây ra lỗi.

đầu ra lỗi

Bạn cũng có thể xác định thẻ xác thực tùy chỉnh nếu các yêu cầu xác thực cụ thể không phải là một phần của thẻ tích hợp.

Bạn có thể dùng Đăng kýXác thực phương pháp của trình xác thực.Validate cấu trúc. Các Đăng kýXác thực phương thức có hai đối số; tên của thẻ xác thực và chức năng xác thực. Hàm xác thực là một hàm gọi lại được gọi cho từng trường có thẻ xác thực tùy chỉnh và hàm này phải trả về ĐÚNG VẬY nếu trường hợp lệ và sai nếu khác.

Dưới đây là định nghĩa ví dụ về thẻ xác thực tùy chỉnh. Thẻ xác thực các trường cho các số chẵn.

 validate.RegisterValidation("even", func(fl validator.FieldLevel) bool {
    
    value, ok := fl.Field().Interface().(int)
    if !ok {
        
        return false
    }
    
    return value % 2 == 0
})

Mã xác định thẻ xác thực tùy chỉnh thậm chí sử dụng Đăng kýXác thực phương pháp của trình xác thực.Validate cấu trúc. Bạn đã xác định thẻ xác thực bằng một hàm nhận một đối số loại trình xác thực.FieldLevel.

Giờ đây, bạn có thể sử dụng thẻ xác thực tùy chỉnh trong các định nghĩa cấu trúc giống như cách bạn làm đối với các thẻ xác thực tích hợp sẵn.

 type MyStruct struct {
    Value int `validate:"even"`
}

Có nhiều cấu trúc hơn để đi

Cấu trúc là công dân hạng nhất trong Go và có rất nhiều thứ bạn có thể làm với cấu trúc. Nếu bạn đã quen thuộc với các ngôn ngữ hướng đối tượng thuần túy, bạn có thể sử dụng các cấu trúc Go để thao tác trên dữ liệu như cách bạn làm với các lớp.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *