Η Go είναι μια ενδιαφέρουσα γλώσσα προγραμματισμού για την κατασκευή σύγχρονων εφαρμογών Ιστού καθώς και λογισμικού συστήματος. Δημιούργησε τεράστιο buzz μετά την κυκλοφορία του και εξουσιοδοτεί υπηρεσίες όπως το Docker, το Kubernetes, το Terraform, το Dropbox και το Netflix .
Επιπλέον, η ισχυρή συλλογή ενσωματωμένων πακέτων του Go το καθιστά εξαιρετική επιλογή για προγραμματισμό ιστού. Αυτό το άρθρο θα σας δείξει πώς να γράψετε έναν βασικό διακομιστή ιστού στο Go.
Εισαγάγετε τα απαραίτητα πακέτα
Το πακέτο net/HTTP παρέχει όλα όσα χρειάζονται για τη δημιουργία ενός διακομιστή web και ενός πελάτη. Αυτό το πακέτο παρουσιάζει μερικές χρήσιμες λειτουργίες για το χειρισμό του προγραμματισμού Ιστού.
Μπορείτε να το εισαγάγετε προσθέτοντας την παρακάτω γραμμή στην αρχή του πηγαίου κώδικα:
import "net/http"
Το άρθρο θα χρησιμοποιήσει επίσης το πακέτο fmt για τη μορφοποίηση συμβολοσειρών και το πακέτο καταγραφής για τη διαχείριση σφαλμάτων. Μπορείτε να τα εισαγάγετε μεμονωμένα όπως φαίνεται παραπάνω ή να εισαγάγετε όλα τα πακέτα χρησιμοποιώντας μια ενιαία δήλωση εισαγωγής:
import (
"fmt"
"log"
"net/http"
)
Μπορείτε να προχωρήσετε στη σύνταξη της κύριας λειτουργίας αφού εισάγετε τα απαραίτητα πακέτα. Προχωρήστε και αποθηκεύστε το αρχείο προέλευσης με την επέκταση .go . Εάν χρησιμοποιείτε το Vim , χρησιμοποιήστε την παρακάτω εντολή για αποθήκευση και έξοδο από το Vim:
:wq server.go
Γράψτε την κύρια συνάρτηση
Τα προγράμματα Go βρίσκονται απευθείας στην κύρια συνάρτηση, που εύστοχα ονομάζεται "κύρια". Θα χρειαστεί να πραγματοποιήσετε μια κλήση διακομιστή εδώ. Προσθέστε τις ακόλουθες γραμμές στον πηγαίο κώδικα και δείτε τι κάνουν:
func main() {
http.HandleFunc("/", index)
log.Fatal(http.ListenAndServe(":8080", nil))
}
Το παράδειγμα είναι ο καθορισμός της κύριας συνάρτησης χρησιμοποιώντας τη λέξη-κλειδί func . Το Go έχει αυστηρούς κανόνες σχετικά με την τοποθέτηση του ανοιγόμενου σιδερώματος, οπότε βεβαιωθείτε ότι το στήριγμα εκκίνησης βρίσκεται στη σωστή γραμμή. Η πρώτη δήλωση στο main ορίζει ότι όλα τα αιτήματα Ιστού προς τη διαδρομή ρίζας ( "/" ) θα αντιμετωπίζονται με ευρετήριο, μια συνάρτηση του τύπου http.HandlerFunc .
Η δεύτερη γραμμή ξεκινά τον διακομιστή web μέσω της συνάρτησης http.ListenAndServe . Σηματοδοτεί τον διακομιστή να ακούει συνεχώς τα εισερχόμενα αιτήματα HTTP στη θύρα 8080 του διακομιστή. Η δεύτερη παράμετρος αυτής της συνάρτησης χρειάζεται για να μπλοκάρει το πρόγραμμα μέχρι το τέλος.
Δεδομένου ότι το http.ListenAndServe επιστρέφει πάντα ένα σφάλμα, το παράδειγμα αναδιπλώνει αυτήν την κλήση μέσα σε ένα log.Fatal κλήση . Αυτή η δήλωση καταγράφει τυχόν μηνύματα σφάλματος που δημιουργούνται από την πλευρά του διακομιστή.
Εφαρμογή συναρτήσεων επεξεργασίας
Όπως μπορείτε να δείτε, η κύρια συνάρτηση καλεί το ευρετήριο συνάρτησης χειριστή για να χειριστεί αιτήματα πελατών. Ωστόσο, το παράδειγμα δεν έχει ακόμη ορίσει αυτήν τη λειτουργία για τον διακομιστή του.
Ας προσθέσουμε τις απαραίτητες δηλώσεις για να κάνουμε τη συνάρτηση ευρετηρίου χρησιμοποιήσιμη:
func index(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hi there, welcome to %s!", r.URL.Path[1:])
}
Αυτή η συνάρτηση παίρνει δύο διαφορετικά ορίσματα τύπου http.ResponseWriter και http.Request . Η παράμετρος http.ResponseWriter περιέχει την απάντηση του διακομιστή στο εισερχόμενο αίτημα, με τη μορφή αντικειμένου http.Request .
Η συνάρτηση Fprintf από το πακέτο fmt χρησιμοποιείται για την εμφάνιση και το χειρισμό συμβολοσειρών κειμένου. Το άρθρο το χρησιμοποιεί αυτό για να εμφανίσει την απάντηση του διακομιστή σε αιτήματα ιστού. Τέλος, το στοιχείο r.URL.Path[1:] χρησιμοποιείται για την ανάκτηση δεδομένων μετά τη διαδρομή ρίζας.
Προσθέστε όλα τα υπόλοιπα μέρη
Ο διακομιστής ιστού Go σας θα είναι έτοιμος μόλις προσθέσετε όλα τα υπόλοιπα στοιχεία. Ο κώδικας θα μοιάζει με αυτό:
import (
"fmt"
"log"
"net/http"
)
func index(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hi there, welcome to %s!", r.URL.Path[1:])
}
func main() {
http.HandleFunc("/", index)
log.Fatal(http.ListenAndServe(":8080", nil))
}
Η πρώτη γραμμή απαιτείται για τη μεταγλώττιση αυτού του κώδικα διακομιστή ιστού Go ως εκτελέσιμο αρχείο.

Μεταγλωττίστε αυτόν τον κώδικα διακομιστή ιστού Go ως εκτελέσιμο αρχείο