Προγραμματισμός

Οδηγός Go: Ξεκινήστε με το Google Go

Γιατί θα θέλατε να χρησιμοποιήσετε τη γλώσσα Go; Βασικά, είναι μια συνοπτική, απλή, ασφαλής και γρήγορη μεταγλωττισμένη γλώσσα με υπέροχα χαρακτηριστικά ταυτότητας και χειρίζεται εύκολα μεγάλα έργα. Είναι επίσης δωρεάν ανοιχτού κώδικα, παρόλο που αναπτύχθηκε αρχικά στο Google.

Σύμφωνα με τον Rob Pike, έναν από τους σχεδιαστές της γλώσσας, «οι στόχοι του έργου Go ήταν η εξάλειψη της βραδύτητας και της αδεξιότητας της ανάπτυξης λογισμικού στο Google, και ως εκ τούτου να καταστήσει τη διαδικασία πιο παραγωγική και επεκτάσιμη. Η γλώσσα σχεδιάστηκε από και για άτομα που γράφουν - και διαβάζουν και διορθώνουν και συντηρούν - μεγάλα συστήματα λογισμικού. "

Σύμφωνα με αυτούς τους στόχους, το Go δεν διαθέτει πολλά χαρακτηριστικά κάποιων άλλων σημαντικών γλωσσών - και αυτό είναι πραγματικά ένα πλεονέκτημα. Το Go δεν είναι προσανατολισμένο σε αντικείμενα, δεν έχει αρχεία κεφαλίδας ή δηλώσεις προώθησης, δεν έχει ιεραρχία τύπου, δεν έχει υπερφόρτωση μεθόδου ή χειριστή, δεν έχει γενικά, δεν έχει εικονική μηχανή για χρόνο εκτέλεσης, δεν έχει εξαιρέσεις και δεν έχει ισχυρισμούς.

Από την άλλη πλευρά, αυτό που έχει η Go λειτουργεί αρκετά καλά. Μπορεί να συγκεντρώσει μεγάλα προγράμματα σε λίγα δευτερόλεπτα. Έχει χαμηλής εναέριας κορουτίνες (ονομάζεται γορουτίνες) που μπορούν να επικοινωνούν αποτελεσματικά μέσω κανάλια. Έχει διεπαφές και σύνθεση διεπαφής. Επιπλέον, το Go υποστηρίζει συναρτήσεις πρώτης κατηγορίας, λειτουργίες υψηλότερης τάξης, τύπους λειτουργιών που καθορίζονται από το χρήστη, κυκλικές λειτουργίες, κλείσιμο και πολλαπλές τιμές επιστροφής - με άλλα λόγια, υποστηρίζει ένα λειτουργικό στυλ προγραμματισμού σε μια έντονα δακτυλογραφημένη γλώσσα.

Αν πεθαίνετε να ζητήσετε κάποια από τις λείπουν δυνατότητες που ανέφερα παραπάνω, ίσως θελήσετε να διαβάσετε τη συζήτηση για τις αλλαγές γλώσσας στις γλώσσες Go. σχεδιαστεί από το μηδέν για να χρησιμοποιεί λειτουργίες γλώσσας Go, αντί να μεταφράζεται κυριολεκτικά από άλλες γλώσσες που χρησιμοποιούν διαφορετικές αφαιρέσεις.

Εγκαταστήστε το Go

Οι σύντομες οδηγίες για την εγκατάσταση του Go εμφανίζονται στο αποθετήριο πηγής. Μπορείτε να κατεβάσετε δυαδικές εκδόσεις Go για Windows, MacOS και Linux ή να εγκαταστήσετε το Go από την πηγή. Θα βρείτε οδηγίες για την εγκατάσταση του Go from source στο GitHub.

Εάν έχετε ήδη εγκαταστήσει το Go, θα πρέπει να ελέγξετε την τρέχουσα έκδοση έκδοσης στο κάτω μέρος του //golang.org/ και, στη συνέχεια, να ελέγξετε την εγκατεστημένη έκδοση από τη γραμμή εντολών:

έκδοση $ go

Εάν η εγκατάστασή σας δεν είναι ενημερωμένη, πραγματοποιήστε λήψη και εγκατάσταση της τρέχουσας έκδοσης. Επανεκκινήστε τυχόν ανοιχτές γραμμές εντολών (Windows) ή τερματικά. Επανάληψη έκδοση go και βεβαιωθείτε ότι η έκδοση είναι αυτό που περιμένατε. Εάν όχι, ενδέχεται να υπάρχει παλαιότερη έκδοση του Go που να εγκαθίσταται αλλού και πρέπει να καταργηθεί.

(Όχι, δεν είμαι παρανοϊκός. Κατάφερα να μπει στην κατάσταση που περιέγραψα χρησιμοποιώντας το Homebrew για να εγκαταστήσω μια έκδοση και το τυπικό πακέτο MacOS για να εγκαταστήσω την επόμενη έκδοση περίπου ένα μήνα αργότερα. Εγκαθίστανται σε διαφορετικές τοποθεσίες στο $ PATH. Μόλις κατάλαβα τι είχε συμβεί, κατάφερα να απεγκαταστήσω την παλιά έκδοση με το Homebrew.)

Μια άλλη επιλογή εγκατάστασης, εάν θέλετε υποστήριξη και αποζημίωση και είστε σε θέση να πληρώσετε, είναι να χρησιμοποιήσετε το ActiveGo.

Μόλις εγκαταστήσετε το μεταγλωττιστή Go και τα εργαλεία, θα πρέπει να περάσετε από την άσκηση της μεταγλώττισης και της εκτέλεσης ενός προγράμματος Go, όπως περιγράφεται στην ενότητα "Δοκιμή της εγκατάστασής σας" της σελίδας εγκατάστασης.

Ρυθμίστε το περιβάλλον Go

Οι προγραμματιστές Go συνήθως διατηρούν όλο τους τον κώδικα σε ένα χώρο εργασίας, με αποθήκη, pkg, και src φακέλους. Σε κάθε φάκελο, τα έργα έχουν συνήθως διαδρομές που σχετίζονται με αποθετήρια Git, όπως το GitHub ή το GitLab. Για παράδειγμα, διατηρώ όλο τον κωδικό γλώσσας Go ~ / δουλειά, και ορίστε το ΓΚΟΠΑΘ μεταβλητή περιβάλλοντος έως $ HOME / εργασία. Η διαδρομή για το φάκελο πηγαίου κώδικα "hello.go" είναι $ GOPATH / src / github.com / meheller / γεια.

Προσθέτω επίσης το GOPATH / κάδος κατάλογος στη διαδρομή μου, για ευκολία στην εκτέλεση προγραμμάτων Go από οποιονδήποτε κατάλογο:

εξαγωγή GOPATH = HOME $ / εργασία

εξαγωγή PATH = $ PATH: $ (go env GOPATH) / bin

Τα βοηθητικά προγράμματα γλώσσας Go θα εγκατασταθούν στο ΓΚΟΠΑΘ από προεπιλογή, οπότε βάζοντας το GOPATH / κάδος Ο κατάλογος στη διαδρομή διευκολύνει επίσης εσάς και τους συντάκτες Go-sedar και IDE να τα βρείτε. Μπορείτε να εγκαταστήσετε τα περισσότερα από τα βοηθητικά προγράμματα με $ πήγαινε μόλις ξέρετε ποια χρειάζεστε και τις διαδρομές αποθετηρίου τους. Τα αποθετήρια είναι συνήθως εύκολο να βρεθούν με μια αναζήτηση Google. Σε ορισμένες περιπτώσεις, μια προσθήκη προγράμματος επεξεργασίας για το Go θα εγκαταστήσει τα βοηθητικά προγράμματα (π.χ. gocodeαυτόματα.

Εάν δεν το ρυθμίσετε μόνοι σας, ΓΚΟΠΑΘ προεπιλογές $ HOME / μετάβαση στα Unix και MacOS και % USERPROFILE% / go σε Windows.

Go εργαλεία γλώσσας, συντάκτες και IDE

Πολλά βοηθητικά προγράμματα Go εγκαθίστανται ως μέρος του πακέτου με τον μεταγλωττιστή. Άλλα μπορούν να εγκατασταθούν με το πήγαινε πάρε εντολή. Τα πιο χρησιμοποιούμενα βοηθητικά προγράμματα γραμμής εντολών Go αναφέρονται παρακάτω.

 
ΟνομαΣύνοψη
πηγαίνωΔιαχειρίζεται τον πηγαίο κώδικα Go και εκτελεί τις άλλες εντολές που αναφέρονται εδώ.
cgoΕπιτρέπει τη δημιουργία πακέτων Go που καλούν κώδικα C.
κάλυμμαΈνα πρόγραμμα για τη δημιουργία και ανάλυση των προφίλ κάλυψης που δημιουργούνται από πηγαίνετε δοκιμή -coverprofile.
διορθώσετεΕύρεση προγραμμάτων Go που χρησιμοποιούν παλιές λειτουργίες της γλώσσας και των βιβλιοθηκών και τα ξαναγράφει για να χρησιμοποιούν νεότερα.
fmtΠακέτα Formats Go. Διατίθεται επίσης ως ανεξάρτητο γοφτ εντολή με πιο γενικές επιλογές.
ΓκόντακΕξάγει και δημιουργεί τεκμηρίωση για πακέτα Go.
κτηνίατροςΕξετάζει τον πηγαίο κώδικα Go και αναφέρει ύποπτες κατασκευές, όπως Εκτύπωση κλήσεις των οποίων τα ορίσματα δεν ευθυγραμμίζονται με τη συμβολοσειρά μορφής.

Ο συνηθισμένος τρόπος κλήσης των περισσότερων από αυτές τις εντολές είναι ως υπο-εντολές του πηγαίνω, για παράδειγμα πηγαίνετε fmt. Άλλοι πρέπει να κληθούν μέσω του πηγαίνετε εργαλείο δευτερεύουσα εντολή. Στην εγκατάστασή μου, πηγαίνετε εργαλείο επιστρέφει την ακόλουθη λίστα γνωστών εργαλείων:

εργαλείο $ go

addr2line

asm

άθλια

cgo

συντάσσω

κάλυμμα

απόσπασμα

έγγρ

διορθώσετε

Σύνδεσμος

νμ

αντικείμενα

πακέτο

pprof

test2json

περιοδεία

ίχνος

κτηνίατρος

Αυτά τα εργαλεία τεκμηριώνονται ως μέρος της πλήρους λίστας εντολών Go. Παρεμπιπτόντως, βεβαιωθείτε ότι έχετε ΓΚΟΠΑΘ έχει ρυθμιστεί πριν από την προσθήκη οποιωνδήποτε εργαλείων Go ή οποιωνδήποτε πρόσθετων προγραμμάτων επεξεργασίας Go που χρησιμοποιούν εργαλεία Go.

Το αποθετήριο Go δεν είχε καμία υποστήριξη από το πρόγραμμα επεξεργασίας ή το IDE από την έκδοση 1.4, αλλά υπάρχουν πολλά και τα δύο που γνωρίζουν για το Go, είτε έξω από το κουτί είτε με λειτουργικές μονάδες πρόσθετου. Συζήτησα πολλά από αυτά σε ένα άρθρο του 2017. υπάρχει επίσης μια ανεπίσημη λίστα που διατηρείται από την κοινότητα Golang.

Τα αγαπημένα μου IDE γλώσσας Go είναι το GoLand (φαίνεται παραπάνω · μετονομάστηκε από το Gogland από τότε που έγραψα το άρθρο το 2017) και το Komodo. Και τα δύο είναι προϊόντα επί πληρωμή με δωρεάν δοκιμές.

Θα θέλατε να εγκαταστήσετε τον εντοπισμό σφαλμάτων Delve for Go. Σε MacOS, ίσως χρειαστεί επίσης να προσθέσετε τα βοηθητικά προγράμματα γραμμής εντολών στο Xcode και ενδεχομένως να προσθέσετε έναν απαλό σύνδεσμο διακομιστής εντοπισμού σφαλμάτων, όπως περιγράφεται στο σχόλιο της 5ης Ιουνίου στη λίστα ζητημάτων Delve. Τρέξιμο xcode-select - εγκατάσταση θα διορθώσει επίσης προβλήματα σχετικά με την εύρεση διακομιστής εντοπισμού σφαλμάτων, αν και με ωμή δύναμη.

Οι αγαπημένοι μου συντάκτες Go-sedar με GUI είναι οι Atom και Visual Studio Code. και τα δύο είναι δωρεάν. Εάν επιλέξετε Atom, εξετάστε το ενδεχόμενο να προσθέσετε τα πακέτα go-plus και go-debug. εάν επιλέξετε Visual Studio Code, εξετάστε το ενδεχόμενο να προσθέσετε το vscode-go.

Εάν είστε σκληροπυρηνικός χρήστης του Vim ή του Emacs, τότε μείνετε με αυτό που ξέρετε - όχι ότι θα μπορούσα να ξεδιπλώσω τον συντάκτη σας από τα κρύα, νεκρά χέρια σας. Το Vim-go προσθέτει υποστήριξη γλώσσας Go για Vim και η λειτουργία go προσθέτει υποστήριξη γλώσσας Go για Emacs.

Μια περιήγηση στο Go

Μπορείτε να μάθετε αρκετά μεταβαίνοντας στο "A Tour of Go", είτε online είτε εκτός σύνδεσης. Υποθέτοντας ότι ολοκληρώσατε την τοπική εγκατάσταση του μεταγλωττιστή και των εργαλείων Go, μπορείτε να εγκαταστήσετε την περιήγηση για να εκτελέσετε τοπικά εκτελώντας αυτές τις δύο εντολές:

$ go get golang.org/x/tour/gotour

$ Gourour

Η δεύτερη γραμμή θα πρέπει να ξεκινήσει έναν διακομιστή ιστού και να ανοίξει ένα παράθυρο του προγράμματος περιήγησης. Αυτό θα μοιάζει ακριβώς με την διαδικτυακή περιοδεία, αλλά μπορεί να τρέξει λίγο πιο γρήγορα επειδή δημιουργεί και εκτελεί δείγματα κώδικα στο δικό σας μηχάνημα. Πατήστε Ctrl-C στο παράθυρο εντολών για να σταματήσετε τον διακομιστή όταν τελειώσετε.

Η περιοδεία χωρίζεται σε τρεις ενότητες. Θέλω να περάσετε ολόκληρη την περιοδεία, συμπεριλαμβανομένων των κουίζ, αλλά θα συνοψίσω κάθε ενότητα παρακάτω ως επισκόπηση και θα σας κάνω μερικές ερωτήσεις. Παρέχω τις απαντήσεις στις ερωτήσεις μου στο τέλος του άρθρου (χωρίς να κρυφοκοιτάζετε!).

Βασικά βασικά γλώσσας

Μάθετε τα βασικά μάθημα 1

Ερώτηση 1. Σε αυτό το παράδειγμα, υπάρχουν τρία πακέτα. Τι είναι και πώς χρησιμοποιούνται; Γιατί το πρόγραμμα επιστρέφει πάντα τον ίδιο αριθμό παρόλο που υπάρχει άκρα λειτουργία?

Σημειώστε ότι δεν έχω καλέσει το Μάθημα 2. Μην παραλείψετε τα μαθήματα μόνο και μόνο επειδή δεν τα σχολίασα.

Μάθετε τα βασικά μάθημα 3

Εάν εκτελέσετε αυτό το παράδειγμα, θα δείτε μηνύματα σφάλματος:

prog.go: 9: 14: δεν μπορεί να αναφέρεται σε μη εξαγόμενο όνομα math.pi

prog.go: 9: 14: undefined: math.pi

Ερώτηση 2. Γιατί τα λάθη; Πώς μπορείτε να διορθώσετε το πρόγραμμα;

Μάθετε τα βασικά μάθημα 4

Ερώτηση 3. Συγκρίνετε αυτήν τη δήλωση με το αντίστοιχο στο C. Τι είναι διαφορετικό;

Μάθετε τα βασικά μάθημα 8

Ερώτηση 4. Γιατί αυτό το πρόγραμμα δεν φέρνει λάθη;

Μάθετε 10 βασικά μαθήματα

Ερώτηση 5. Ποιος είναι ο τύπος του κ; Γιατί; Εάν ο τύπος δεν είναι προφανής, ανατρέξτε στο Μάθημα 11 για να μάθετε πώς να τον εμφανίσετε.

Μάθετε τα βασικά μάθημα 12

Αυτό το μάθημα απαντά στην ερώτηση που έθεσα στο Μάθημα 8.

Μάθημα Go Flow Control 1

Ερώτηση 6. Πώς διαφέρει αυτό από το Για βρόχο στην αγαπημένη σας γλώσσα; Πιστεύετε ότι είναι απαραίτητες οι άλλες κατασκευές βρόχου στην αγαπημένη σας γλώσσα; Οι πρόσθετες πληροφορίες στα επόμενα τρία μαθήματα αλλάζουν γνώμη;

Μάθημα ελέγχου ροής Go 7

Πριν εκτελέσετε αυτό το πρόγραμμα, ελέγξτε το γραφείο και γράψτε τι νομίζετε ότι θα εκτυπώσει. Εκτελέστε το πρόγραμμα. Είστε σωστοί; Εάν όχι, τι δεν καταλάβατε;

Μάθημα ελέγχου ροής Go 8

Αυτό είναι το είδος της άσκησης που μπορείτε να κάνετε στην αρχή μιας συνέντευξης στον πίνακα. Δώστε χρόνο στον εαυτό σας καθώς το επεξεργάζεστε. Πείτε τι σκέφτεστε καθώς αντιμετωπίζετε το πρόβλημα.

Ερώτηση 7. Το υπόλοιπο τμήμα ελέγχου ροής είναι σημαντικό να γίνει κατανοητό. Αφού περάσετε τα μαθήματα 9 έως 13, εξηγήστε το Go διακόπτης και αναβάλλω δηλώσεις με έναν τρόπο που ένας προγραμματιστής C, Java ή JavaScript θα μπορούσε να κάνει grok.

Μάθετε περισσότερα Τύποι Μάθημα 1

Πριν εκτελέσετε αυτό το πρόγραμμα, ελέγξτε το γραφείο και γράψτε τι νομίζετε ότι θα εκτυπώσει. Εκτελέστε το πρόγραμμα. Είστε σωστοί; Εάν όχι, τι δεν καταλάβατε;

Πώς αισθάνεστε ότι ο Go έχει δείκτες αλλά όχι αριθμητικό δείκτη;

Εργαστείτε στην ενότητα "Περισσότεροι τύποι" μέχρι να φτάσετε στην άσκηση στο Μάθημα 18. Ερώτηση 8. Τι μάθατε για τους πίνακες και τις φέτες Go; Τώρα ολοκληρώστε την άσκηση.

Συνεχίστε την άσκηση στο Μάθημα 23.

Ερώτηση 9. Εξηγήστε ένα Go χάρτης. Γιατί θα θέλατε να χρησιμοποιήσετε ένα;

Ολοκληρώστε την ενότητα Περισσότερα τύποι.

Ερώτηση 10. Μπορεί το Go να χρησιμοποιηθεί ως λειτουργική γλώσσα προγραμματισμού, παρά τη σύνταξη; Πότε και γιατί θα χρησιμοποιούσατε το κλείσιμο;

Go μεθόδους και διεπαφές

Παρακολουθήστε και τα 25 μαθήματα σε αυτήν την ενότητα ξεκινώντας από //tour.golang.org/methods/1.

Ερώτηση 11. Όταν τελειώσετε, εξηγήστε πώς η χρήση μεθόδων και διεπαφών του Go διαφέρει από τις τάξεις C ++. Ποιο σου αρέσει καλύτερα; Γιατί;

Πηγαίνετε ταυτόχρονη

Η γορουτίνη είναι ένα από τα καθοριστικά χαρακτηριστικά του Go for concurrency. Στο πρώτο μάθημα στην ενότητα ταυτόχρονη, προσπαθήστε να ελέγξετε το πρόγραμμα (παρακάτω) και να γράψετε τι νομίζετε ότι θα εκτυπώσει.

Εκτελέστε το πρόγραμμα. Είστε σωστοί; Εξηγήστε τι πραγματικά συμβαίνει και γιατί.

Τα κανάλια είναι ο τρόπος για να συγχρονίσετε έμμεσα τις γορουτίνες. Στο επόμενο μάθημα (παρακάτω), προσπαθήστε ξανά να ελέγξετε το πρόγραμμα πριν το εκτελέσετε.

Ερώτηση 12. Γιατί υπάρχει μόνο ένα κανάλι σε αυτό το παράδειγμα, παρόλο που υπάρχουν δύο κλήσεις γορουτίνης;

Η δήλωση select επιτρέπει σε μια γορουτίνη να περιμένει σε πολλές λειτουργίες επικοινωνίας. Ποια είναι η σειρά με την οποία εκτελούνται οι δηλώσεις στο παρακάτω πρόγραμμα;

Η άσκηση σε ισοδύναμα δυαδικά δέντρα είναι μια άλλη που μπορεί να συναντήσετε σε μια συνέντευξη στον πίνακα. Δώστε χρόνο στον εαυτό σας και εξηγήστε τη σκέψη σας καθώς εφαρμόζετε μια λύση. Ομοίως, κάντε την άσκηση εφαρμογής ενός προγράμματος ανίχνευσης ιστού σαν να ήσασταν σε μια συνέντευξη.

Απαντήσεις σε ερωτήσεις Go

Απάντηση 1. Τα πακέτα καθορίζονται από το πακέτο δήλωση για το τρέχον πρόγραμμα και από το εισαγωγή δήλωση για εξωτερικά πακέτα που χρησιμοποιούνται. Σε αυτό το απλό πρόγραμμα, κύριος είναι το δικό του πακέτο του προγράμματος και εισάγει fmt ώστε να μπορεί να εκτυπώσει και μαθηματικά/άκρα έτσι ώστε να μπορεί να δημιουργήσει έναν τυχαίο αριθμό.

Οι διάφορες μέθοδοι στο άκρα βασιστείτε στο χρόνο ρολογιού για να δημιουργήσετε τυχαίους αριθμούς, αλλά ο χρόνος καθορίζεται στο Gourour περιβάλλον. Ως συνέχεια, βρείτε το πακέτο και τη μέθοδο που αναφέρει την ώρα (υπόδειξη: κοιτάξτε εδώ αν κολλήσετε) και χρησιμοποιήστε το για να εκτυπώσετε την τρέχουσα ώρα. Εκτελέστε αυτό πολλές φορές στο Gourour περιβάλλον, και επίσης να δημιουργήσετε το πρόγραμμα τοπικά και να το εκτελέσετε πολλές φορές στο δικό σας μηχάνημα.

Απάντηση 2. Οι εξαγωγές στο Go πρέπει πάντα να γράφονται με κεφαλαία και η γλώσσα είναι κεφαλαία. math.Pi είναι η σωστή μέθοδος.

Απάντηση 3. Στο C / C ++ οι μεταβλητές δηλώσεις ακολουθούν τη φόρμα (π.χ. int i, j, k;), ενώ στο Go ο τύπος ακολουθεί το όνομα της μεταβλητής και μπορεί να παραλειφθεί όσο μπορεί να συναχθεί ο τύπος. Στο C / C ++ ο τύπος επιστροφής προηγείται ενός ονόματος συνάρτησης, ενώ στο Go έρχεται μετά από τη λίστα παραμέτρων συνάρτησης και πριν από το σώμα της συνάρτησης. Στο C / C ++, τα τελεία με ερωτηματικά είναι υποχρεωτικά.

Απάντηση 4. Δεν ρίχνει σφάλματα επειδή οι μεταβλητές Go που δεν ορίζονται διαφορετικά αρχικοποιούνται στη μηδενική τιμή του τύπου, π.χ. 0 ή ψευδής. Στο C / C ++, ο μεταγλωττιστής επισημαίνει μη αρχικοποιημένες μεταβλητές.

Απάντηση 5.κ είναι ακέραιος, επειδή αρχικοποιήθηκε 3.

$config[zx-auto] not found$config[zx-overlay] not found