Το Go 1.22 έχει ήδη κυκλοφορήσει, μάθετε για τις νέες δυνατότητες και τις βελτιώσεις του

Γκόλαντ

Το Go είναι μια ταυτόχρονη, μεταγλωττισμένη γλώσσα προγραμματισμού με στατική πληκτρολόγηση εμπνευσμένη από τη σύνταξη C.

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

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

Κύρια νέα χαρακτηριστικά του Go 1.22

Σε αυτήν τη νέα έκδοση, που εισήχθη από την έκδοση Go 1.22, ξεχωρίζουν δύο αλλαγές στους βρόχους "for" . Προηγουμένως, οι μεταβλητές που δηλώνονταν από έναν βρόχο "for" δημιουργούνταν μία φορά και ενημερώνονταν σε κάθε επανάληψη. Στην έκδοση Go 1.22, κάθε επανάληψη του βρόχου δημιουργεί νέες μεταβλητές για την αποτροπή τυχαίων σφαλμάτων κοινής χρήσης. Επιπλέον , προστέθηκε πειραματική υποστήριξη (GOEXPERIMENT=rangefunc) για συναρτήσεις εύρους σε βρόχους "for", επιτρέποντας τον καθορισμό μιας συνάρτησης ως επαναλήπτη. Ένα μακροχρόνιο πρόβλημα με τους βρόχους "for" που προκαλούσε κλήσεις coroutine για κοινή χρήση μεταβλητών βρόχου μεταξύ επαναλήψεων επιλύθηκε επίσης . Επιπλέον, οι βρόχοι "for" μπορούν πλέον να επαναλαμβάνονται σε ακέραιους αριθμούς. Για παράδειγμα:

κύρια εισαγωγή πακέτου "fmt" func main() { for i := range 10 { fmt.Println(10 - i) } fmt.Println("go1.22 take off!") }

Μια άλλη αξιοσημείωτη αλλαγή σε αυτήν τη νέα έκδοση είναι η εισαγωγή της δυνατότητας χρήσης ενός καταλόγου " vendor " που περιέχει εξαρτήσεις χώρου εργασίας. Οι εντολές μπορούν πλέον να χρησιμοποιούν αυτόν τον κατάλογο, ο οποίος δημιουργείται με το ` go work vendor` και χρησιμοποιείται στις εντολές δημιουργίας όταν το ` -mod` έχει οριστεί σε " vendor ", που είναι η προεπιλογή όταν υπάρχει ένας κατάλογος " vendor " στον χώρο εργασίας.

Είναι σημαντικό να σημειωθεί ότι η λειτουργικότητα ` go get` δεν υποστηρίζεται πλέον εκτός μιας ενότητας σε παλαιότερη λειτουργία GOPATH . Ωστόσο, άλλες εντολές δημιουργίας όπως `go build` και `go test` θα συνεχίσουν να λειτουργούν επ' αόριστον για παλαιότερα προγράμματα GOPATH. Επιπλέον, η εντολή `go mod init` δεν θα επιχειρεί πλέον να εισαγάγει απαιτήσεις ενότητας από αρχεία διαμόρφωσης άλλων εργαλείων προμηθευτών (όπως το Gopkg.lock).

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

Συνεχίστηκαν οι εργασίες για την ενσωμάτωση βελτιστοποιήσεων μεταγλωττιστή με βάση τα αποτελέσματα της δημιουργίας προφίλ κώδικα PGO. Ο μεταγλωττιστής χρησιμοποιεί πλέον εργαλεία αποεικονοποίησης για να αντικαταστήσει τις έμμεσες κλήσεις από διάφορες μεθόδους με την εκτέλεση διευρυμένων ενσωματωμένων μπλοκ. Όταν ενεργοποιήθηκε το PGO, αυτή η αλλαγή βελτίωσε την απόδοση των περισσότερων προγραμμάτων κατά 2% έως 14%.

Στην έκδοση του Go για Windows, τα προγράμματα που συνδέονται ή φορτώνουν βιβλιοθήκες Go που έχουν δημιουργηθεί με -buildmode=c-archive ή -buildmode=c-shared μπορούν πλέον να χρησιμοποιήσουν το API Καταγραφής Συμβάντων (ETW) των Windows μέσω των νέων πακέτων runtime/trace και tracehook , τα οποία υλοποιούν το πρωτόκολλο συλλογής ιχνηλάτησης συμβάντων Go ως πάροχο ETW.

Από τις άλλες αλλαγές που ξεχωρίζουν:

  • Η εντολή πάω τεστ -κάλυμμα τώρα εκτυπώνει περιλήψεις κάλυψης για καλυμμένα πακέτα που δεν έχουν δικά τους αρχεία δοκιμής.
  • os/exec, προστέθηκε η δυνατότητα ορισμού χαρακτηριστικών περιβάλλοντος, επιτρέποντάς σας να ορίσετε τιμές όπως ο κατάλογος εργασίας, οι μεταβλητές περιβάλλοντος και ο περιγραφέας αρχείου εισόδου/εξόδου για εκτελούμενες εντολές.
  • Βελτιστοποιημένη διαχείριση μνήμης στο χρόνο εκτέλεσης, με αποτέλεσμα 1-3% αύξηση της απόδοσης και μείωση 1% στην κατανάλωση μνήμης για τις περισσότερες εφαρμογές.
  • El paquete net/http, η συνάρτηση έχει προστεθεί CloseIdleConnections στον υπολογιστή-πελάτη HTTP, ο οποίος κλείνει όλες τις αδρανείς συνδέσεις που χρησιμοποίησε πρόσφατα ο πελάτης
  • Μια βελτιωμένη πειραματική υλοποίηση (GOEXPERIMENT=newinliner) του μηχανισμού εισαγωγής κλήσης έχει προστεθεί στον μεταγλωττιστή, ο οποίος χρησιμοποιεί ευρετικές μεθόδους για να διαχωρίσει σημαντικές λειτουργίες από μη σημαντικές.
  • Το πακέτο προστέθηκε » math/rand/v2 » στην τυπική βιβλιοθήκη, η οποία προσφέρει ένα πιο συνεπές API και χρησιμοποιεί ταχύτερους αλγόριθμους για τη δημιουργία ψευδοτυχαίων αριθμών.
  • El paquete net/http.ServeMux Προστέθηκε η δυνατότητα καθορισμού μεθόδων και μασκών σε πρότυπα.

Τέλος, αν ενδιαφέρεστε να μάθετε περισσότερα, μπορείτε να βρείτε τις λεπτομέρειες στον παρακάτω σύνδεσμο.


Προσθήκη ως προτιμώμενης πηγής στην Google