Όταν δημιουργείτε έναν ιστότοπο, συνήθως δημιουργείτε δυναμικά μέρος του τελικού σας περιεχομένου. Στη συνέχεια, θα θέλετε να εισάγετε αυτά τα δεδομένα στις τελικές ιστοσελίδες σας για εμφάνιση σε ένα πρόγραμμα περιήγησης.
Μπορείτε να ακολουθήσετε μία από τις δύο προσεγγίσεις: να ενσωματώσετε τη δομή της σελίδας σας στο πρόγραμμά σας ή να συνδυάσετε τα τελικά δεδομένα σας με ξεχωριστά αρχεία προτύπων.
Το πρότυπο παρέχει διαχωρισμό των ανησυχιών για μια πιο διατηρήσιμη βάση κώδικα. Διευκολύνει επίσης τον διαχωρισμό εργασιών front-end και back-end, αναθέτοντάς τους σε διαφορετικά μέλη της ομάδας. Το Go διαθέτει εξαιρετική υποστήριξη προτύπων στην τυπική βιβλιοθήκη του.
Ξεκινώντας με το Templating in Go
Το Go διαθέτει δύο πακέτα προτύπων στην τυπική βιβλιοθήκη: κείμενο/πρότυπο και html/πρότυπο. Το πακέτο κειμένου/προτύπου έχει λειτουργικότητα για την ανάλυση αρχείων κειμένου, ενώ το html/πρότυπο χειρίζεται HTML. Χρησιμοποιώντας το html/πρότυπο, είστε προστατευμένοι από επιθέσεις μεταξύ δέσμης ενεργειών (XSS) καθώς το Go διαφεύγει την εισαγωγή δεδομένων κατά την απόδοση. Αυτό είναι ένα άλλο πλεονέκτημα του προτύπου έναντι μιας χειροκίνητης προσέγγισης.
Δεδομένου ότι το πακέτο προτύπων είναι μέρος της τυπικής βιβλιοθήκης, δεν θα χρειαστεί να εγκαταστήσετε εξαρτήσεις. απλά εισάγετέ το:
εισαγωγή "html/πρότυπο"
Ξεκινήστε από δημιουργία αρχείου HTML για χρήση ως πρότυπο για την εφαρμογή σας. Μπορείτε να χρησιμοποιήσετε το πρότυπο .html επέκταση ή οποιοδήποτε άλλο .gohtml ή .tmpl, είναι και τα δύο που είναι επίσης κοινά. Όποια επέκταση και αν χρησιμοποιείτε, η λειτουργικότητα εντός της εφαρμογής σας θα είναι η ίδια. Ορισμένα προγράμματα επεξεργασίας κειμένου ενδέχεται να εφαρμόζουν διαφορετική επισήμανση σύνταξης ανάλογα με τις επεκτάσεις των προτύπων σας. Εδώ είναι ένας βασικός σκελετός:
<!DOCTYPE html>
<html lang="en">
<κεφάλι>
<meta charset="UTF-8">
<τίτλος>Εγγραφο</title>
</head>
<σώμα>
</body>
</html>
Αποθηκεύστε αυτό το αρχείο στον κατάλογο του προγράμματος Go σας. Μπορείτε τώρα να αρχίσετε να εργάζεστε με αυτό, ως πρότυπο, στο πρόγραμμά σας.
Δημιουργήστε μια παγκόσμια παρουσία του Πρότυπο μέθοδο του πακέτου προτύπου. Θα έχετε πρόσβαση σε αυτό το παράδειγμα προτύπου από διάφορα μέρη του προγράμματός σας.
var tmplt *πρότυπο. Πρότυπο
Θα πρέπει να δημιουργήσετε έναν απλό διακομιστή για απόδοση και εμφάνιση των προτύπων σας. Δείτε πώς μπορείτε να ξεκινήσετε έναν απλό διακομιστή στο Go χρησιμοποιώντας το net/http πακέτο:
funcrunServer() {
http. HandleFunc("/home", handlePage)
λάθος := http. ListenAndServe("localhost:8080", μηδέν)
αν λάθος!= μηδέν {
κούτσουρο. Fatalln ("Υπάρχει ένα σφάλμα με τον διακομιστή:", err)
}
}
Θα καλέσετε το runServer λειτουργία από την κύρια λειτουργία σας για την εκκίνηση του διακομιστή. Ο διακομιστής έχει μόνο μία διαδρομή, το /home διαδρομή, η οποία θα εμφανίσει τη σελίδα σας. ο handlePage παράμετρος είναι το όνομα μιας συνάρτησης χειριστή που θα αποδώσει τη σελίδα σας. ο ListenAndServe Η μέθοδος ξεκινά την ακρόαση του διακομιστή στη θύρα 8080 επί localhost, δηλαδή τον δικό σας υπολογιστή.
Μεταβίβαση μεταβλητών σε πρότυπα
Δημιουργήστε μια καθολική δομή με το όνομα Νέα:
τύπος Νέα struct {
Επικεφαλίδα σειρά
Σώμα σειρά
}
Θα χρησιμοποιήσετε αυτήν τη δομή για να αποθηκεύσετε δεδομένα και να τα μεταφέρετε στο πρότυπό σας για εμφάνιση στην τελική σας σελίδα. Στο πρότυπό σας, μπορείτε στη συνέχεια να χρησιμοποιήσετε αυτήν τη σύνταξη για να εισάγετε δεδομένα:
{{ όνομα }}
Οπου όνομα είναι το όνομα μιας μεταβλητής που έχετε μεταβιβάσει στο πρότυπό σας. Όταν αποδώσετε το πρότυπο, θα αντικαταστήσει τις τιμές σε αγκύλες με αντίστοιχα δεδομένα από τον κώδικα Go σας. Δεδομένου ότι το ακόλουθο παράδειγμα θα περάσει μια δομή, θα χρησιμοποιήσετε τη σημειογραφία για να αποκτήσετε πρόσβαση στα πεδία της:
<σώμα>
<h1>{{ .Επικεφαλίδα }}</h1>
<Π> {{ .Σώμα }} </Π>
</body>
Αντικαταστήστε το κενό στοιχείο σώματος στη σήμανση σκελετού του προτύπου σας με τον παραπάνω κώδικα.
ο handlePage Η λειτουργία χειριστή θα επαληθεύσει ότι το αίτημα για τη σελίδα είναι αίτημα GET. Στη συνέχεια, συμπληρώνει μια δομή με δείγματα δεδομένων πριν από την απόδοση του προτύπου και την προβολή της τελικής σελίδας:
funchandlePage(συγγραφέας http. ResponseWriter, αίτημα *http. Αίτηση) {
αν αίτηση. Μέθοδος == "GET" {
tmplt, _ = πρότυπο. ParseFiles ("tutorial.html")εκδήλωση := Ειδήσεις{
Επικεφαλίδα: "το makeuseof.com έχει τα πάντα Tech",
Σώμα: «Επισκεφθείτε το MUO Για οτιδήποτε σχετίζεται με την τεχνολογία»,
}err := tmplt. Εκτέλεση (συγγραφέας, συμβάν)
αν λάθος!= μηδέν {
ΕΠΙΣΤΡΟΦΗ
}
}
}
ο ParseFiles μέθοδος αναλύει το αρχείο HTML που καθορίζετε. ο Εκδήλωση μεταβλητή είναι η αρχικοποιημένη δομή. ο Εκτέλεση Η μέθοδος θα εισάγει τα παρεχόμενα δεδομένα στην τελική σελίδα, σύμφωνα με τα σύμβολα κράτησης θέσης στο πρότυπο. Η εκτέλεση παίρνει α ResponseWriter και τα δεδομένα, σε αυτήν την περίπτωση, το struct.
Ακολουθεί το αποτέλεσμα από την εκτέλεση του διακομιστή και την επίσκεψη στη σελίδα:
Χρήση δομών ελέγχου σε πρότυπα
Μπορείτε επίσης να χρησιμοποιήσετε δομές ελέγχου όπως εντολές υπό όρους και βρόχους στα πρότυπά σας.
Ένας βρόχος σάς επιτρέπει να εξάγετε πολλές τιμές και να επαναχρησιμοποιείτε την ίδια δομή για καθεμία. Χρησιμοποιήστε το εύρος λέξη-κλειδί για να ορίσετε την αρχή του επαναλαμβανόμενου περιεχομένου και το τέλος λέξη-κλειδί για το τέλος. Μέσα στον βρόχο μπορείτε να χρησιμοποιήσετε το {{.}} σύνταξη για την εισαγωγή της τρέχουσας τιμής:
{{εύρος .}}
- {{.}}
{{τέλος}}
Στη συνέχεια, θα μεταβιβάσετε το όνομα της δομής δεδομένων που θέλετε να πραγματοποιήσετε ως παράμετρο στη μέθοδο Execute:
makeUseOfCategories := []σειρά{"Technology Explained", "Programming", "Linux",
"Android", "iOS", "Πολλά περισσότερα..."}err := tmplt. Εκτέλεση (συγγραφέας, makeUseOfCategories)
αν λάθος!= μηδέν {
ΕΠΙΣΤΡΟΦΗ
}
ο makeUseOfCategories Η μεταβλητή είναι ένα κομμάτι συμβολοσειρών που πρέπει να περάσει ως παράμετρος δεδομένων. Ακολουθεί το αποτέλεσμα του κυκλώματος μέσα από τη φέτα:
Μπορείτε να χρησιμοποιήσετε μια πρόταση υπό όρους στα πρότυπά σας για να ελέγξετε την τιμή μιας δυαδικής μεταβλητής. Δημιουργήστε μια δομή με πεδία boolean, όπως αυτό:
τύπος TrueFalser struct {
Είναι αλήθεια bool
Είναι Λάθος bool
IsDefault bool
}
Για να χρησιμοποιήσετε μια υπό όρους, συμπεριλάβετε το αν λέξη-κλειδί σε διπλές αγκύλες πριν από το όνομα της μεταβλητής προς δοκιμή. Τερματίστε το μπλοκ υπό όρους με το τέλος λέξη-κλειδί σε τιράντες:
{{if .IsTrue}}
<Π>Αξιολογεί true και θα βγει</Π>
{{τέλος}}{{if .IsDefault}}
<Π>Αξιολογεί ψευδή και κέρδισε't έξοδο</Π>
{{τέλος}}
{{if .IsFalse}}
<Π>Αξιολογεί ψευδή και κέρδισε't έξοδο</Π>
{{τέλος}}
Η εκκίνηση μιας δομής στο Go ορίζει τις τιμές σε false από προεπιλογή, οπότε αν δεν αρχικοποιήσετε ένα πεδίο, αυτό αξιολογείται σε false. Κατά την αρχικοποίηση της δομής και τη μετάδοση της μεταβλητής ως δεδομένων στο πρότυπο, μόνο τα πεδία που αξιολογούνται ως αληθινά προκαλούν την εμφάνιση εξόδου.
επιλογή := TrueFalser {
Είναι αλήθεια: αληθής,
Is False: ψευδής,
}
err := tmplt. Εκτέλεση (συγγραφέας, επιλογή)
Η τελική έξοδος περιλαμβάνει μόνο μία παράγραφο αφού μόνο το πεδίο isTrue αξιολογείται ως true:
Δεν χρειάζεται να χρησιμοποιείτε πρότυπα για τις εφαρμογές υποστήριξης
Το πρότυπο δεν είναι απαίτηση για τις εφαρμογές Go. Μπορείτε να χρησιμοποιήσετε άλλες προσεγγίσεις, όπως την ενσωμάτωση της δομής της σελίδας σας στο πρόγραμμά σας, παράλληλα με τη λογική και άλλη συμπεριφορά.
Ωστόσο, θα καταλήξετε να κάνετε περισσότερη δουλειά για τον εαυτό σας. Το πρότυπο Go βοηθά στην αποτροπή επιθέσεων XSS και διευκολύνει τον διαχωρισμό της εργασίας στη δομή της σελίδας από τη λογική υποστήριξης.