Go (γνωστή και ως Golang) είναι μια γλώσσα προγραμματισμού ανοιχτού κώδικα, στατικά τυποποιημένη. Αναπτύχθηκε αρχικά από την Google. Ορισμένα αξιοσημείωτα χαρακτηριστικά της Go περιλαμβάνουν την απλότητα, την υψηλή απόδοση, την αναγνωσιμότητα και την αποτελεσματικότητα.
Όπως κάθε άλλη εξέχουσα γλώσσα προγραμματισμού, η τυπική βιβλιοθήκη της Go προσφέρει ένα πλούσιο σύνολο πακέτων. Ωστόσο, μπορούμε επίσης να επεκτείνουμε τις λειτουργίες ενσωματώνοντας πακέτα τρίτων. Αυτός ο οδηγός θα δείξει την εισαγωγή πακέτων και την ενσωμάτωσή τους στα Go έργα σας.
Προαπαιτούμενα
Για να ακολουθήσετε αυτόν τον οδηγό, θα χρειαστείτε τα ακόλουθα στοιχεία προετοιμασμένα στη διάθεσή σας:
- Έναν κατάλληλα ρυθμισμένο διακομιστή Ubuntu. Μάθετε περισσότερα σχετικά με τη ρύθμιση του δικού σας Ubuntu διακομιστή στο CloudSigma.
- Το περιβάλλον προγραμματισμού Go. Μπορείτε να χρησιμοποιήσετε αυτόν τον οδηγό για την εγκατάσταση της Go σε Ubuntu.
- Έναν σύγχρονο επεξεργαστή κειμένου, για παράδειγμα, Vim, Sublime Text, Atom, Visual Studio Code, Brackets, κ.λπ. Αυτός ο οδηγός θα παρουσιάσει το Visual Studio Code .
Step 1 – Εγκατάσταση της Go
Έχουμε ήδη συζητήσει την εγκατάσταση της βασικής γλώσσας προγραμματισμού Go σε Ubuntu 20.04. Ωστόσο, υπάρχει μια ευκολότερη εναλλακτική μέθοδος: g (ένας ελαφρύς διαχειριστής εκδόσεων Go).
Ο λόγος που πρόκειται να χρησιμοποιήσουμε το g είναι ότι καμία από τις εκδόσεις Go που είναι διαθέσιμες από τα αποθετήρια πακέτων του Ubuntu ή το snap δεν διαθέτει την τελευταία διαθέσιμη έκδοση Go (v1.18 κατά τη στιγμή της συγγραφής αυτού του οδηγού). Συνιστάται πάντα η χρήση της τελευταίας διαθέσιμης έκδοσης οποιουδήποτε πακέτου γλώσσας προγραμματισμού.
Η ακόλουθη εντολή θα εκτελέσει το g σενάριο εγκατάστασης:
|
1 |
wget -qO- https://git.io/g-install | sh -s |


Για να εφαρμοστούν οι αλλαγές, πρέπει να επανεκκινήσετε τη συνεδρία του shell. Μετά την επανεκκίνηση, επαληθεύστε την εγκατάσταση:
|
1 |
go version |
|
1 |
which go |

Μετά την εγκατάσταση της Go, συνιστάται επίσης να εγκαταστήσετε το gopls . Είναι ο επίσημος διακομιστής γλώσσας της Go. Είναι συμβατός με πολλούς επεξεργαστές κειμένου όπως οι VS Code, Vim, Emacs, Sublime Text, Atom και πολλοί άλλοι. Εκτελέστε την ακόλουθη εντολή:
|
1 |
go install golang.org/x/tools/gopls@latest |
Το περιβάλλον προγραμματισμού Go είναι τώρα έτοιμο.
Step 2 – Δημιουργία ενός Δείγματος Σεναρίου Go
Όλος ο κώδικας που παρουσιάζεται σε αυτόν τον οδηγό θα χωρέσει σε ένα μόνο σενάριο Go. Δημιουργήστε ένα δείγμα σεναρίου Go:
|
1 |
touch practice.go |
Αφού κάνετε αλλαγές στο σενάριο, μπορούμε να το εκτελέσουμε χρησιμοποιώντας την ακόλουθη εντολή Go:
|
1 |
go run practice.go |
Εδώ, ο μεταγλωττιστής της Go θα εκτελέσει τον κώδικα σε λειτουργία διερμηνέα.
Step 3 – Χρήση Πακέτων της Τυπικής Βιβλιοθήκης
Η Go συνοδεύεται από μια τεράστια συλλογή στην τυπική της βιβλιοθήκη. Αποτελείται από πολυάριθμα πακέτα, για παράδειγμα:
- fmt: Υλοποιεί μορφοποιημένη είσοδο/έξοδο με συναρτήσεις ανάλογες της C ( printf και scanf ).
- http: Αυτό το πακέτο παρέχει συναρτήσεις για τη δημιουργία υπηρεσιών ιστού, την αποστολή και τη λήψη δεδομένων μέσω του http πρωτοκόλλου, κ.λπ.
Για να ενσωματωθεί οποιοδήποτε πακέτο σε ένα έργο Go, πρέπει να υλοποιηθεί χρησιμοποιώντας τη δήλωση import . Η δήλωση ορίζεται από τη λέξη-κλειδί import μαζί με τα ονόματα των πακέτων. Για παράδειγμα, για να εισαγάγετε το math/rand , η δήλωση εισαγωγής θα έμοιαζε κάπως έτσι:
|
1 |
import "math/rand" |
Ο ακόλουθος κώδικας υλοποιεί διάφορες συναρτήσεις από το πακέτο math/rand :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package main import "math/rand" func main() { for i := 0; i < 10; i++ { println(rand.Intn(25)) } } |
Αυτός ο κώδικας παρουσιάζει έναν απλό βρόχο for που εκτυπώνει 10 τυχαίους ακέραιους αριθμούς (0 έως 24) στην οθόνη. Εδώ:
- rand.Int() : Αυτή η κλήση συνάρτησης επιστρέφει έναν τυχαίο ακέραιο.
- rand.Intn() : Λειτουργεί παρόμοια με το rand.Int() αλλά δέχεται μια παράμετρο που ορίζει το εύρος για τους τυχαίους ακέραιους αριθμούς (από το 0 έως τον καθορισμένο αριθμό).
Στη συνέχεια, εκτελέστε τον κώδικα:
|
1 |
go run practice.go |
Το αποτέλεσμα θα μοιάζει κάπως έτσι:

Σημειώστε ότι το αποτέλεσμα θα είναι ακριβώς το ίδιο, καθώς ο σπόρος για τη γεννήτρια τυχαίων αριθμών είναι μια σταθερή τιμή από προεπιλογή. Αυτή είναι η φύση μιας γεννήτριας ψευδοτυχαίων αριθμών. Μπορείτε να μάθετε περισσότερα για το random seed εδώ.
Βήμα 4 – Εισαγωγή Πολλαπλών Πακέτων
Μεγαλύτερα και πιο σύνθετα έργα πρέπει να ενσωματώνουν πολλαπλά πακέτα. Πώς τα εισάγετε στον κώδικα Go σας; Μια έγκυρη επιλογή είναι να χρησιμοποιήσετε μεμονωμένες δηλώσεις εισαγωγής για κάθε εισαγόμενο πακέτο. Ωστόσο, αυτή η προσέγγιση είναι αναποτελεσματική σε σύγκριση με την ακόλουθη δομή εισαγωγής:
|
1 2 3 4 5 6 7 8 9 |
import ( "<package_1>" "<package_2>" "<package_3>" ) |
Εδώ, μια ενιαία δήλωση εισαγωγής ενσωματώνει πολλαπλά πακέτα ταυτόχρονα. Αυτό μειώνει την ποσότητα του κώδικα που απαιτείται να γραφτεί, βελτιώνοντας παράλληλα την αναγνωσιμότητα.
Ο ακόλουθος κώδικας θέτει αυτή τη δυνατότητα σε λειτουργία:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
package main import ( "fmt" "math/rand" ) func main() { for i := 0; i < 10; i++ { fmt.Printf("%d) %d\n", i, rand.Intn(25)) } } |
Εκτελέστε τον κώδικα:
|
1 |
go run practice.go |
Το αποτέλεσμα θα μοιάζει κάπως έτσι:

Βήμα 5 – Εγκατάσταση Πρόσθετων Βιβλιοθηκών Go
Η πρότυπη βιβλιοθήκη της Go συνοδεύεται από πολυάριθμα χρήσιμα πακέτα. Αυτά είναι, από σχεδιασμό, γενικής χρήσης. Επιτρέπει στους προγραμματιστές να δημιουργούν τα δικά τους πακέτα πάνω στην πρότυπη βιβλιοθήκη για να καλύψουν τις συγκεκριμένες ανάγκες τους. Δείτε την επίσημη βάση δεδομένων πακέτων Go.
Τι γίνεται αν πρέπει να χρησιμοποιήσετε ένα πακέτο Go τρίτου μέρους; Η Go συνοδεύεται από την go install εντολή ( go get έχει καταργηθεί). Μπορεί να λάβει οποιοδήποτε πακέτο Go τρίτου μέρους από το διαδίκτυο.
Για επίδειξη, πρόκειται να εγκαταστήσουμε το cobra-cli πακέτο. Η ακόλουθη εντολή Go θα κατεβάσει και θα εγκαταστήσει τα απαραίτητα αρχεία και θα ενσωματώσει το πακέτο στο σύστημα βιβλιοθηκών της Go:
|
1 |
go install github.com/spf13/cobra-cli@latest |

Το εκτελέσιμο (binary) του cobra-cli θα πρέπει να βρίσκεται στην ακόλουθη τοποθεσία:
|
1 |
ls -l $GOPATH/bin |

Τα άλλα αρχεία του πακέτου θα πρέπει να βρίσκονται στην ακόλουθη τοποθεσία:
|
1 |
ls -l $GOPATH/pkg/mod/github.com/spf13 |

Ξεκινώντας από τη Go v1.11, τα Go modules καθορίζουν την έκδοση του πακέτου που επιθυμείτε να εισαγάγετε. Αυτό εξηγείται λεπτομερώς εδώ: Go Modules GitHub.
Βήμα 6 – Ψευδώνυμα Πακέτων
Σε διάφορες περιπτώσεις, ενδέχεται να βρείτε αντικρουόμενα ονόματα πακέτων μεταξύ των τοπικών και των εισαγόμενων πακέτων. Εδώ είναι που η χρήση ψευδωνύμων (aliasing) μπορεί να λύσει τη σύγκρουση. Η δομή του aliasing μοιάζει κάπως έτσι:
|
1 |
import <alias> "import_package_name" |
Ας τροποποιήσουμε το απλό μας πρόγραμμα Go για να ενσωματώσουμε το fmt_alias ως ψευδώνυμο για το πακέτο fmt :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
package main import ( fmt_alias "fmt" "math/rand" ) func main() { for i := 0; i < 10; i++ { fmt_alias.Printf("%d) %d\n", i, rand.Intn(25)) } } |
Παρατηρήστε ότι αντί να χρησιμοποιούμε το fmt.Printf() , χρησιμοποιούμε το ψευδώνυμο του πακέτου fmt_alias.Printf() .
Ωστόσο, η Go δεν είναι και τόσο φιλική προς τα ψευδώνυμα. Όταν χρησιμοποιείτε ψευδώνυμα για να αποφύγετε τη σύγκρουση ονομάτων εισαγωγής, συνιστάται να δίνετε ψευδώνυμο στην πιο τοπική ή ειδική για το έργο εισαγωγή. Για παράδειγμα, αν θέλετε να έχετε τόσο ένα τοπικό πακέτο strings όσο και ένα πακέτο συστήματος strings , τότε θα πρέπει να δώσετε ψευδώνυμο στο τοπικό πακέτο, όχι στο πακέτο συστήματος.
Η καλύτερη πρακτική είναι να αποφεύγετε τις συγκρούσεις ονομάτων εξαρχής.
Βήμα 7 – Μορφοποίηση Εισαγωγών
Μάθαμε να δηλώνουμε όλες τις εισαγωγές χρησιμοποιώντας μία μόνο δήλωση import . Τι γίνεται αν είχατε αρκετές εισαγωγές; Για παράδειγμα:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import ( "fmt" "os" "github.com/example/foo" "github.com/example/bar" "math/rand" "github.com/abc/pqr/xyz" ) |
Η μορφοποίηση των εισαγωγών ταξινομεί τα πακέτα σε μια συγκεκριμένη σειρά, βελτιώνοντας τη συνέπεια του κώδικα. Καθώς ταξινομεί μόνο τη σειρά των εισαγωγών, αποτρέπει επίσης τα τυχαία commits. Αποτρέπει επίσης τις περιττές αλλαγές στον κώδικα και τις μπερδεμένες αξιολογήσεις κώδικα.
Οι περισσότεροι σύγχρονοι επεξεργαστές θα μορφοποιήσουν τις εισαγωγές για εσάς αυτόματα. Εναλλακτικά, υποστηρίζουν goimports. Είναι κοινή πρακτική στον κλάδο να χρησιμοποιείται goimports αντί για τη χειροκίνητη ταξινόμηση των εισαγωγών. Επιπλέον, goimports αντικατοπτρίζει επίσης τις αλλαγές στυλ στον κώδικα.
Δείτε πώς το import block μπορεί να μοιάζει μετά την εφαρμογή του goimports :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import ( fmt_alias "fmt" "math/rand" "os" "github.com/example/foo" "github.com/example/bar" "github.com/abc/pqr/xyz" ) |
Παρατηρείτε κάποιο μοτίβο;
- Όλες οι τυπικές βιβλιοθήκες ομαδοποιούνται πρώτες.
- Οι ομάδες διαχωρίζονται με κενές γραμμές, βελτιώνοντας την αναγνωσιμότητα του κώδικα.
Τελικές Σκέψεις
Οι εισαγωγές στη Go είναι μια ισχυρή δυνατότητα που επιτρέπει την κλήση συναρτήσεων που δεν είναι ενσωματωμένες στη Go. Ενώ η τυπική βιβλιοθήκη προσφέρει πολλά πακέτα γενικής χρήσης, η Go υποστηρίζει επίσης πακέτα τρίτων. Αυτός ο οδηγός δείχνει την εισαγωγή ενσωματωμένων πακέτων και πακέτων τρίτων της Go.
Σε αυτόν τον οδηγό, εκτελέσαμε τα προγράμματά μας στη Go χρησιμοποιώντας τον διερμηνέα. Ωστόσο, μπορείτε να μεταγλωττίσετε τους κώδικες σε αυτόνομα εκτελέσιμα αρχεία για καλύτερη απόδοση. Μπορείτε να μάθετε περισσότερα σχετικά με τη μεταγλώττιση προγραμμάτων Go εδώ. Αν θέλετε να μάθετε πώς να αναπτύξετε μια web εφαρμογή Go με το Nginx, δείτε αυτό το σεμινάριο. Επιπλέον, μπορείτε να ρίξετε μια ματιά στον οδηγό μας που παρουσιάζει πώς να γράψετε τα δικά σας πακέτα Go.
Είστε προγραμματιστής Go; Η CloudSigma προσφέρει υποστήριξη Go API για απρόσκοπτη ενσωμάτωση με τα έργα σας.
Καλή συνέχεια!
Σχόλια
Δεν υπάρχουν σχόλια ακόμα. Γράψτε το πρώτο.