Οι δομές είναι ένας από τους κύριους και ευρέως χρησιμοποιούμενους τύπους δεδομένων που παρέχονται στη γλώσσα προγραμματισμού Go. Πολλά πακέτα σε διάφορες λειτουργίες, από πακέτα βάσεων δεδομένων έως ORM, και ορισμένα πλαίσια web χρησιμοποιούν δομές για εύκολη ανάλυση δεδομένων και άλλες λειτουργίες.
Η επικύρωση δομών είναι μια κοινή εργασία στο Go και το πακέτο επικύρωσης Go παρέχει έναν απλό και αποτελεσματικό τρόπο επικύρωσης δομών στα έργα σας.
Τι είναι το πακέτο επικύρωσης Go
ο Μετάβαση σε επικυρωτή Το πακέτο υλοποιεί επικυρώσεις τιμών για δομές και μεμονωμένα πεδία με βάση καθορισμένες ετικέτες στη δήλωση δομής.
Το πακέτο επικύρωσης Go παρέχει λειτουργίες για επικύρωση μεταξύ πεδίων και διασταυρώσεων με χρήση ετικετών, τμημάτων, πίνακα και κατάδυσης χαρτών που επιτρέπουν επίπεδα πολυδιάστατη επικύρωση πεδίων, επικύρωση προσαρμοσμένων πεδίων, εξαγωγή προσαρμοσμένων ονομάτων πεδίων, προσαρμόσιμα μηνύματα σφάλματος και υποστήριξη για το δημοφιλής
Πλαίσιο τζιν ως προεπιλεγμένο εργαλείο επικύρωσης για το πακέτο.Εκτελέστε μία από αυτές τις εντολές στο τερματικό του καταλόγου εργασίας σας για να εγκαταστήσετε το επικυρωτή πακέτο.
πηγαίνω πάρτε gopkg.in/πηγαίνω-παιδική χαρά/επικύρωση.v9
πηγαίνω λάβετε github.com/πηγαίνω-παιδική χαρά/επικύρωση/v10
Οι εκδόσεις είναι το επίθημα της διεύθυνσης URL. Η πρώτη εντολή εγκαθιστά την έκδοση 9 και η δεύτερη την έκδοση 10 του πακέτου.
Μετά την εγκατάσταση του πακέτου, μπορείτε να εισαγάγετε το πακέτο στα έργα σας ανάλογα με την έκδοση που εγκαταστήσατε.
εισαγωγή (
"gopkg.in/go-playground/validator.v9"
)
Τώρα μπορείτε να συνεχίσετε να χρησιμοποιείτε το πακέτο επικύρωσης Go. Εάν υπάρχουν προβλήματα με την εγκατάστασή σας, δοκιμάστε να εγκαταστήσετε ξανά/αναβαθμίσετε στην πιο πρόσφατη έκδοση Go.
Επικύρωση δομών με το πακέτο Validator
Θα χρειαστεί να δημιουργήσετε ένα παράδειγμα του επικυρωτή. Επικυρώνω struct, ορίστε τη δομή που θέλετε να επικυρώσετε χρησιμοποιώντας ετικέτες επικύρωσης για να καθορίσετε τους κανόνες επικύρωσης για τα πεδία.
Δείτε πώς μπορείτε να δημιουργήσετε ένα παράδειγμα του επικυρωτή. Επικυρώνω struct.
funcκύριος() {
επικυρώνω := επικυρωτικός. Νέος()
}
Μπορείτε να ορίσετε μια δομή που θέλετε να επικυρώσετε καθορίζοντας ετικέτες για τα πεδία, ορίζοντας έτσι κανόνες επικύρωσης. Οι ετικέτες επικύρωσης είναι ειδικοί σχολιασμοί ορισμών πεδίων δομής που καθορίζουν τους κανόνες.
Ακολουθεί μια κανονική δομή για επικύρωση.
τύπος Χρήστης struct {
Ονομα σειρά
Ηλικία ενθ
ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ σειρά
}
Ακολουθεί ένα παράδειγμα της δομής, έτοιμη για επικύρωση.
τύπος Χρήστης struct {
Ονομα σειρά`validate:"required"`
Ηλικία ενθ`validate:"gte=0,lte=130"`
ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ σειρά`validate:"required, email"`
}
Σε αυτό το παράδειγμα, καθορίσατε το Ονομα πεδίο όπως απαιτείται στο instantiation, το Ηλικία Το πεδίο πρέπει να είναι μεγαλύτερο ή ίσο με 0 και μικρότερο ή ίσο με 130, και το ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ Το πεδίο είναι υποχρεωτικό και πρέπει να είναι μια έγκυρη διεύθυνση email κατά την εγκατάσταση.
Διαφορετικές ετικέτες επικύρωσης είναι διαθέσιμες στο πακέτο εργαλείου επικύρωσης Go, συμπεριλαμβανομένων ετικετών για τα απαιτούμενα πεδία, ελάχιστες και μέγιστες τιμές και κανονικές εκφράσεις. Μπορείτε να βρείτε μια πλήρη λίστα με τις διαθέσιμες ετικέτες επικύρωσης στην τεκμηρίωση για το πακέτο εργαλείου επικύρωσης Go.
Αφού ορίσετε τη δομή που θέλετε να επικυρώσετε και καθορίσετε τους κανόνες επικύρωσης για κάθε πεδίο, μπορείτε να χρησιμοποιήσετε το Struct μέθοδος του επικυρωτή. Επικυρώνω struct για επικύρωση της δομής.
χρήστης := Χρήστης{
// Το όνομα δεν έχει δημιουργηθεί
Ηλικία: 3990000,
ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ: "[email protected]",
}
// σημειώστε ότι τα πεδία Όνομα και Ηλικία αποτυγχάνουν στην επικύρωση
err := επικύρωση. Δομή (χρήστης)
αν λάθος!= μηδέν {
// Η δομή δεν είναι έγκυρη
}
ο Struct Η μέθοδος επιστρέφει ένα σφάλμα εάν υπάρχουν σφάλματα επικύρωσης και μπορείτε να χειριστείτε το σφάλμα με βάση τη λειτουργία σας.
Μπορείτε να αποκτήσετε πρόσβαση σε αυτά τα σφάλματα χρησιμοποιώντας το Σφάλματα επικύρωσης μέθοδο του σφάλματος.
αν λάθος!= μηδέν {
Για _, λάθος := εύρος err.(επικυρωτή. Σφάλματα επικύρωσης) {
fmt. Println (λάθ. Field(), err. Ετικέτα())
}
}
ο Σφάλματα επικύρωσης Η μέθοδος θα επιστρέψει το όνομα κάθε πεδίου με ένα σφάλμα επικύρωσης και την ετικέτα επικύρωσης που προκάλεσε το σφάλμα.
Μπορείτε επίσης να ορίσετε προσαρμοσμένες ετικέτες επικύρωσης εάν συγκεκριμένες απαιτήσεις επικύρωσης δεν αποτελούν μέρος των ενσωματωμένων ετικετών.
Μπορείτε να χρησιμοποιήσετε το Εγγραφή Επικύρωση μέθοδος του επικυρωτή. Επικυρώνω struct. ο Εγγραφή Επικύρωση Η μέθοδος παίρνει δύο ορίσματα. το όνομα της ετικέτας επικύρωσης και μια συνάρτηση επικύρωσης. Η συνάρτηση επικύρωσης είναι μια συνάρτηση επανάκλησης που καλείται για κάθε πεδίο που έχει την προσαρμοσμένη ετικέτα επικύρωσης και η συνάρτηση πρέπει να επιστρέψει αληθής εάν το πεδίο είναι έγκυρο και ψευδής αν διαφορετικά.
Ακολουθεί ένα παράδειγμα ορισμού μιας προσαρμοσμένης ετικέτας επικύρωσης. Η ετικέτα επικυρώνει πεδία για ζυγούς αριθμούς.
επικυρώνω. ΕγγραφήΕπικύρωση("ακόμη και", func(fl επικυρωτής. Επίπεδο πεδίου)bool {
// Προσπαθήστε να λάβετε την τιμή του πεδίου ως int
αξία, εντάξει := fl. Field().Interface().(ενθ)
αν !Εντάξει {
// Εάν η τιμή του πεδίου δεν είναι int, επιστρέψτε false
ΕΠΙΣΤΡΟΦΗψευδής
}
// Επιστρέφετε true εάν η τιμή είναι άρτια, ψευδής, διαφορετικά
ΕΠΙΣΤΡΟΦΗ αξία % 2 == 0
})
Ο κώδικας ορίζει μια προσαρμοσμένη ετικέτα επικύρωσης ακόμη και χρησιμοποιώντας την Εγγραφή Επικύρωση μέθοδος του επικυρωτή. Επικυρώνω struct. Ορίσατε την ετικέτα επικύρωσης χρησιμοποιώντας μια συνάρτηση που λαμβάνει ένα μεμονωμένο όρισμα τύπου επικυρωτή. Επίπεδο πεδίου.
Τώρα μπορείτε να χρησιμοποιήσετε την προσαρμοσμένη ετικέτα επικύρωσης σε ορισμούς δομών με τον ίδιο τρόπο που θα κάνατε για τις ενσωματωμένες ετικέτες επικύρωσης.
τύπος MyStruct struct {
αξία ενθ`επικύρωση:"ακόμη"`
}
Υπάρχουν περισσότερα για να πάει Structs
Οι Structs είναι πολίτες πρώτης κατηγορίας στο Go και υπάρχουν τόσα πολλά που μπορείτε να κάνετε με τα structs. Εάν είστε εξοικειωμένοι με γλώσσες καθαρά αντικειμενοστρεφείς, μπορείτε να χρησιμοποιήσετε δομές Go για να λειτουργήσετε δεδομένα όπως θα κάνατε με τις κλάσεις.