Πηγαίνετε στο 1.24

Πηγαίνετε στο 1.24

Μια νέα έκδοση της γλώσσας Go, έκδοση 1.24, έρχεται έξι μήνες μετά Πηγαίνετε στο 1.23. Οι περισσότερες αλλαγές αφορούν την υλοποίηση της αλυσίδας εργαλείων, του χρόνου εκτέλεσης και των βιβλιοθηκών. Όπως πάντα, η έκδοση προβλέπει υπόσχεση συμβατότητας Go 1. Οι σχεδιαστές γλωσσών αναμένουν ότι σχεδόν όλα τα προγράμματα Go θα συνεχίσουν να μεταγλωττίζονται και να εκτελούνται όπως πριν.

Αλλαγές στη γλώσσα

Το Go 1.24 υποστηρίζει πλέον πλήρως ψευδώνυμα γενικού τύπου: ένα ψευδώνυμο τύπου μπορεί να παραμετροποιηθεί ως δηλωμένος τύπος. Λεπτομέρειες στο γλωσσικές προδιαγραφές. Προς το παρόν, αυτή η δυνατότητα μπορεί να απενεργοποιηθεί ορίζοντας GOEXPERIMENT=noaliatypeparams; Ωστόσο, η επιλογή aliastypeparams θα καταργηθεί στο Go 1.25.

Εργαλεία

Πηγαίνετε εντολή

Οι λειτουργικές μονάδες Go μπορούν πλέον να παρακολουθούν τις εκτελέσιμες εξαρτήσεις χρησιμοποιώντας την οδηγία εργαλείου στο go.mod. Αυτό καταργεί την ανάγκη για την προηγούμενη λύση της προσθήκης εργαλείων ως κενών εισαγωγών σε ένα αρχείο που συνήθως ονομάζεται "tools.go". Η εντολή go tool μπορεί πλέον να εκτελέσει αυτά τα εργαλεία εκτός από τα εργαλεία που συνοδεύουν το Go. Περισσότερες πληροφορίες μπορείτε να βρείτε στο τεκμηρίωση.

Η νέα σημαία εργαλείου για το go get προκαλεί την προσθήκη οδηγιών εργαλείων στην τρέχουσα ενότητα για τα καθορισμένα πακέτα εκτός από την προσθήκη οδηγιών απαίτησης.

νέος εργαλείο μετα-μοτίβου αναφέρεται σε όλα τα εργαλεία της τρέχουσας ενότητας. Αυτό μπορεί να χρησιμοποιηθεί για να τα ενημερώσετε όλα μέσω του εργαλείου go get ή για να τα εγκαταστήσετε στον κατάλογό σας GOBIN μέσω του εργαλείου go install.

Τα εκτελέσιμα που δημιουργήθηκαν μέσω του go run και η νέα συμπεριφορά του εργαλείου go αποθηκεύονται τώρα στην προσωρινή μνήμη cache του Go build. Αυτό καθιστά δυνατές επαναλαμβανόμενες εκκινήσεις λόγω της αυξημένης κρυφής μνήμης. #69290.

Οι εντολές go build και go install δέχονται τώρα τη σημαία -json, η οποία αναφέρει την έξοδο κατασκευής και τα σφάλματα ως δομημένη έξοδο JSON σε τυπική έξοδο. Μπορείτε να δείτε λεπτομέρειες μορφής στο go help buildjson.

Επιπλέον, το go test -json αναφέρει τώρα τα σφάλματα εξόδου και κατασκευής σε JSON, σε συνδυασμό με το αποτέλεσμα της δοκιμής JSON. Μπορούν να διακριθούν από τους νέους τύπους ενεργειών, αλλά εάν προκαλούν προβλήματα στο δοκιμαστικό σύστημα ενοποίησης, μπορείτε να επιστρέψετε στην έξοδο κειμένου της έκδοσης μέσω Ρύθμιση GODEBUG gotestjsonbuildtext=1.

Η νέα μεταβλητή περιβάλλοντος GOAUTH παρέχει έναν ευέλικτο τρόπο εξουσιοδότησης έλξης ιδιωτικών μονάδων. Μπορείτε να δείτε λεπτομέρειες στο go help goauth.

Η εντολή go build είναι τώρα εγκατεστημένη έκδοση της κύριας μονάδας στο μεταγλωττισμένο δυαδικό, με βάση μια ετικέτα ή/και μια δέσμευση ελέγχου έκδοσης. Το επίθημα +dirty θα προστεθεί εάν υπάρχουν μη δεσμευμένες αλλαγές. Η σημαία -buildvcs=false μπορεί να χρησιμοποιηθεί για την παράλειψη πληροφοριών ελέγχου έκδοσης από το δυαδικό αρχείο.

Νέος Ρύθμιση GODEBUG toolchaintrace=1 μπορεί τώρα να χρησιμοποιηθεί για την παρακολούθηση της διαδικασίας επιλογής αλυσίδας εργαλείων στην εντολή go.

Cgo

Το Cgo υποστηρίζει νέους σχολιασμούς για λειτουργίες C για τη βελτίωση της απόδοσης χρόνου εκτέλεσης. Το #cgo noescape cFunctionName λέει στον μεταγλωττιστή ότι η μνήμη που μεταβιβάστηκε στη συνάρτηση C cFunctionName δεν έχει διαφύγει. #cgo nocallback cFunctionName λέει στον μεταγλωττιστή ότι η συνάρτηση C cFunctionName δεν ανακαλεί καμία συνάρτηση Go. Περισσότερες πληροφορίες μπορείτε να βρείτε στο τεκμηρίωση cgo.

Το Cgo αρνείται επί του παρόντος να μεταγλωττίσει κλήσεις σε μια συνάρτηση C που έχει πολλές μη συμβατές δηλώσεις. Για παράδειγμα, εάν η f δηλωθεί τόσο ως void f(int) όσο και ως void f(double), το cgo θα αναφέρει ένα σφάλμα αντί να δημιουργήσει πιθανώς μια μη έγκυρη ακολουθία κλήσης f(0). Νέο σε αυτήν την έκδοση είναι ο βελτιωμένος εντοπισμός αυτής της συνθήκης σφάλματος όταν εμφανίζονται μη συμβατές δηλώσεις σε διαφορετικά αρχεία. #67699.

Objdump

Το εργαλείο objdump υποστηρίζει πλέον αποσυναρμολόγηση σε LoongArch 64-bit (GOARCH=loong64), RISC-V (GOARCH=riscv64) και S390X (GOARCH=s390x).

Λίπος

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

Ο υπάρχων αναλυτής printf αναφέρει τώρα διαγνωστικά για κλήσεις της φόρμας fmt.Printf(s), όπου το s είναι μια συμβολοσειρά μη σταθερής μορφής χωρίς άλλα ορίσματα. Τέτοιες κλήσεις είναι σχεδόν πάντα ένα σφάλμα, αφού η τιμή του s μπορεί να περιέχει τον χαρακτήρα %. χρησιμοποιήστε το fmt.Print. 60529. Αυτός ο έλεγχος τείνει να βρίσκει πράγματα στον υπάρχοντα κώδικα και επομένως εφαρμόζεται μόνο όταν η έκδοση γλώσσας (όπως καθορίζεται από την οδηγία go του αρχείου go.mod ή τα σχόλια `//go:build`) είναι τουλάχιστον Go 1.24, για να αποφευχθεί η πρόκληση μεγάλων διακοπών ενοποίησης κατά την αναβάθμιση στην αλυσίδα εργαλείων Go 1.24.

Ο υπάρχων αναλυτής ετικετών δόμησης αναφέρει πλέον διαγνωστικά όταν υπάρχει λανθασμένη ετικέτα δόμησης περιορισμός κατασκευής παλαιότερης έκδοσης Μεταβείτε στην οδηγία //go:build. Για παράδειγμα, το //go:build go1.23.1 αναφέρεται σε μια απελευθέρωση σημείου. αντί για χρήση //go:build go1.23. #64127.

Ο υπάρχων αναλυτής copylock αναφέρει τώρα ένα διαγνωστικό όταν μια μεταβλητή δηλώνεται σε έναν τριπλό βρόχο "for", όπως για i := iter(); έγινε(i); i = next(i) { … }, περιέχει sync.Locker, όπως sync.Mutex. Πηγαίνετε στο 1.22 άλλαξε τη συμπεριφορά τέτοιων βρόχων για να δημιουργήσει μια νέα μεταβλητή για κάθε επανάληψη, αντιγράφοντας τις τιμές από την προηγούμενη επανάληψη. Αυτή η αντιγραφή δεν είναι ασφαλής για κλειδαριές. #66387.

GOCACHEPROG

Ο εσωτερικός μηχανισμός δυαδικής και δοκιμαστικής προσωρινής αποθήκευσης cmd/go μπορεί πλέον να υλοποιηθεί από θυγατρικές διεργασίες που υλοποιούν ένα πρωτόκολλο JSON μεταξύ του εργαλείου cmd/go και της θυγατρικής διεργασίας που ονομάζεται από τη μεταβλητή περιβάλλοντος GOCACHEPROG. Παλαιότερα ήταν για GOEXPERIMENT. Λεπτομέρειες του πρωτοκόλλου μπορείτε να δείτε στο τεκμηρίωση.

Χρόνος ολοκλήρωσης

Αρκετές βελτιώσεις απόδοσης χρόνου εκτέλεσης μείωσαν την επιβάρυνση της CPU κατά 2-3% κατά μέσο όρο σε ένα σύνολο αντιπροσωπευτικών σημείων αναφοράς. Τα αποτελέσματα ενδέχεται να διαφέρουν ανάλογα με την εφαρμογή. Αυτές οι βελτιώσεις περιλαμβάνουν μια νέα ενσωματωμένη εφαρμογή χάρτη που βασίζεται σε Σουηδικά τραπέζια, πιο αποτελεσματική κατανομή της μνήμης μικρών αντικειμένων και μια νέα εσωτερική εφαρμογή χρόνου εκτέλεσης του mutex.

Η νέα ενσωματωμένη υλοποίηση χάρτη και το νέο εσωτερικό mutex χρόνου εκτέλεσης μπορούν να απενεργοποιηθούν ορίζοντας GOEXPERIMENT=noswissmap και GOEXPERIMENT=nospinbitmutex κατά το χρόνο κατασκευής, αντίστοιχα.

Μεταγλωττιστής

Ο μεταγλωττιστής απαγόρευε ήδη τον ορισμό νέων μεθόδων με τύπους δεκτών που δημιουργήθηκαν από το cgo, αλλά ήταν δυνατό να αντιμετωπιστεί αυτός ο περιορισμός μέσω ενός ψευδωνύμου τύπου. Το Go 1.24 αναφέρει τώρα πάντα ένα σφάλμα εάν ο δέκτης υποδηλώνει έναν τύπο που δημιουργείται από cgo, είτε άμεσα είτε έμμεσα (μέσω ψευδωνύμου τύπου).

Σύνδεσμος

Ο σύνδεσμος δημιουργεί τώρα ένα αναγνωριστικό κατασκευής GNU (καταχώρηση ELF NT_GNU_BUILD_ID) σε πλατφόρμες ELF και ένα UUID (εντολή φόρτωσης Mach-O LC_UUID) στο macOS από προεπιλογή. Το αναγνωριστικό έκδοσης ή το UUID προέρχεται από το αναγνωριστικό κατασκευής Go. Αυτό μπορεί να απενεργοποιηθεί με τη σημαία -B none linker ή να αντικατασταθεί με τη σημαία σύνδεσης -B 0xNNNN με μια δεκαεξαδική τιμή που καθορίζεται από τον χρήστη.

Προαγωγή

Όπως αναφέρεται στο Σημειώσεις έκδοσης Go 1.22, Το Go 1.24 απαιτεί τώρα την εγκατάσταση του Go 1.22.6 ή νεότερης έκδοσης. Οι προγραμματιστές αναμένουν ότι το Go 1.26 θα απαιτήσει την κυκλοφορία του Go 1.24 ή νεότερη έκδοση.

Τυπική Βιβλιοθήκη

Πρόσβαση συστήματος αρχείων με περιορισμό καταλόγου

Νέος τύπος os.root Παρέχει τη δυνατότητα εκτέλεσης λειτουργιών συστήματος αρχείων μέσα σε έναν συγκεκριμένο κατάλογο.

Λειτουργία os.OpenRoot ανοίγει τον κατάλογο και επιστρέφει os.root. Μέθοδοι για os.root λειτουργούν σε αυτόν τον κατάλογο και δεν επιτρέπουν στα μονοπάτια να αναφέρονται σε τοποθεσίες εκτός του καταλόγου, συμπεριλαμβανομένων εκείνων που ακολουθούν συμβολικούς συνδέσμους εκτός του καταλόγου. Οι μέθοδοι στο os.Root αντικατοπτρίζουν τις περισσότερες από τις λειτουργίες του συστήματος αρχείων που είναι διαθέσιμες στο πακέτο os, συμπεριλαμβανομένων, για παράδειγμα, os.Root.Open, os.Root.Create, os.Root.Mkdir и os.Root.Stat.

Νέα δυνατότητα αναφοράς

Τα σημεία αναφοράς μπορούν πλέον να χρησιμοποιούν μια πιο γρήγορη, λιγότερο επιρρεπή σε σφάλματα μέθοδο δοκιμή.B.Loop για επανάληψη σε ένα σημείο αναφοράς όπως για το b.Loop() { … } αντί για τις τυπικές δομές βρόχου που περιλαμβάνουν bN όπως για το εύρος bN Αυτό προσφέρει δύο σημαντικά πλεονεκτήματα:

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

Βελτιωμένοι οριστικοποιητές

Νέα δυνατότητα runtime.AddCleanup είναι ένας μηχανισμός ολοκλήρωσης που είναι πιο ευέλικτος, πιο αποτελεσματικός και λιγότερο επιρρεπής σε σφάλματα από runtime.SetFinalizer. Το AddCleanup επισυνάπτει μια συνάρτηση καθαρισμού σε ένα αντικείμενο που θα εκτελεστεί μόλις το αντικείμενο καταστεί μη διαθέσιμο. Ωστόσο, σε αντίθεση με το SetFinalizer, πολλαπλές εκκαθαρίσεις μπορούν να προσαρτηθούν σε ένα μεμονωμένο αντικείμενο, εκκαθαρίσεις μπορούν να συνδεθούν σε εσωτερικούς δείκτες, οι εκκαθαρίσεις δεν προκαλούν συνήθως διαρροές όταν τα αντικείμενα σχηματίζουν έναν κύκλο και οι εκκαθαρίσεις δεν καθυστερούν την εκχώρηση του αντικειμένου ή των αντικειμένων στα οποία οδηγεί. Ο νέος κώδικας θα πρέπει να προτιμά το AddCleanup από το SetFinalizer.

Νέο αδύναμο πακέτο

Νέο πακέτο αδύνατος παρέχει αδύναμους δείκτες.

Οι αδύναμοι δείκτες είναι ένα αρχέγονο χαμηλού επιπέδου που παρέχεται για τη δημιουργία δομών αποδοτικής μνήμης, όπως αδύναμα λεξικά για αντιστοίχιση τιμών, λεξικά κανονικοποίησης για οτιδήποτε δεν καλύπτεται από ένα πακέτο. μοναδικός, και διάφορους τύπους κρυφών μνήμων. Για την υποστήριξη αυτών των περιπτώσεων χρήσης, αυτή η έκδοση παρέχει επίσης runtime.AddCleanup и maphash.Συγκρίσιμο.

Νέο πακέτο κρυπτογράφησης/mlkem

Νέο πακέτο κρυπτο/mlkem υλοποιεί τα ML-KEM-768 και ML-KEM-1024.

Το ML-KEM είναι ένας μετα-κβαντικός μηχανισμός ανταλλαγής κλειδιών, παλαιότερα γνωστός ως Kyber και καθορίζεται στο FIPS 203.

Νέα πακέτα crypto/hkdf, crypto/pbkdf2 και crypto/sha3

Νέο πακέτο crypto/hkdf υλοποιεί τη συνάρτηση εξαγωγής κλειδιού «Extract-and-Expand» HKDF που βασίζεται σε HMAC, όπως ορίζεται στο RFC 5869.

Νέο πακέτο crypto/pbkdf2 υλοποιεί τη συνάρτηση παραγωγής κλειδιού PBKDF2 βάσει κωδικού πρόσβασης όπως ορίζεται στο RFC 8018.

Νέο πακέτο crypto/sha3 υλοποιεί τη συνάρτηση κατακερματισμού SHA-3 και τις επεκτάσιμες συναρτήσεις εξόδου SHAKE και cSHAKE όπως ορίζονται στο FIPS 202.

Και τα τρία πακέτα βασίζονται στα υπάρχοντα πακέτα golang.org/x/crypto/….

Συμμόρφωση FIPS 140-3

Αυτή η έκδοση περιλαμβάνει ένα νέο σύνολο μηχανισμών για τη διασφάλιση της συμμόρφωσης με το FIPS 140-3.

Η μονάδα κρυπτογράφησης Go είναι ένα σύνολο εσωτερικών προτύπων πακέτων βιβλιοθήκης που χρησιμοποιούνται με διαφάνεια για την υλοποίηση αλγορίθμων εγκεκριμένων από το FIPS 140-3. Οι εφαρμογές δεν απαιτούν αλλαγές για τη χρήση της μονάδας κρυπτογράφησης Go για εγκεκριμένους αλγόριθμους.

Η νέα μεταβλητή περιβάλλοντος GOFIPS140 μπορεί να χρησιμοποιηθεί για την επιλογή της έκδοσης της μονάδας κρυπτογράφησης Go που θα χρησιμοποιηθεί σε μια έκδοση. Νέος Ρύθμιση GODEBUG Το fips140 μπορεί να χρησιμοποιηθεί για την ενεργοποίηση της λειτουργίας FIPS 140-3 κατά το χρόνο εκτέλεσης.

Το Go 1.24 περιλαμβάνει το Go crypto module v1.0.0, το οποίο δοκιμάζεται αυτήν τη στιγμή σε ένα διαπιστευμένο εργαστήριο CMVP.

Δοκιμή/συγχρονισμός νέου πειραματικού πακέτου

Νέο πειραματικό πακέτο δοκιμή/συγχρονισμός Παρέχει υποστήριξη για τη δοκιμή ταυτόχρονου κώδικα.

  • Λειτουργία synctest.run τρέχει μια ομάδα γορουτίνες σε μια απομονωμένη «φούσκα». Στο συννεφάκι της συνάρτησης πακέτου ώρα λειτουργούν σε ψεύτικα ρολόγια.
  • Λειτουργίες συγχρονίζω.περιμένω περιμένετε μέχρι να αποκλειστούν όλες οι γορουτίνες στο τρέχον συννεφάκι.

Λεπτομέρειες μπορείτε να βρείτε στην τεκμηρίωση του πακέτου.

Το πακέτο συγχρονισμού είναι πειραματικό και πρέπει να ενεργοποιηθεί ορίζοντας GOEXPERIMENT=synctest. Το API πακέτου ενδέχεται να αλλάξει σε μελλοντικές εκδόσεις. ΣΕ #67434 Μπορείτε να δείτε περισσότερες λεπτομέρειες και να υποβάλετε σχόλια.

Μικρές αλλαγές στη βιβλιοθήκη

αρχείο

Οι υλοποιήσεις (*Writer.AddFS) στο archive/zip και archive/tar γράφουν τώρα την κεφαλίδα καταλόγου για έναν κενό κατάλογο.

bytes

Πακέτο bytes προσθέτει πολλές συναρτήσεις που λειτουργούν με επαναλήπτες:

  • γραμμές Επιστρέφει έναν επαναλήπτη σε συμβολοσειρές διαχωρισμένες με νέα γραμμή σε ένα κομμάτι byte.
  • SplitSeq επιστρέφει έναν επαναλήπτη σε όλα τα υποτμήματα μιας τομής byte που χωρίζονται από ένα διαχωριστικό.
  • SplitAfterSeq επιστρέφει έναν επαναλήπτη πάνω από τις δευτερεύουσες φέτες ενός κομματιού byte, χωρισμένο μετά από κάθε εμφάνιση του διαχωριστή.
  • FieldsSeq επιστρέφει έναν επαναλήπτη σε υποτμήματα μιας φέτας byte γύρω από ακολουθίες χαρακτήρων διαστήματος, όπως ορίζεται unicode.IsSpace
  • FieldsFuncSeq επιστρέφει έναν επαναλήπτη σε υποτμήματα μιας φέτας byte γύρω από ακολουθίες σημείων κώδικα Unicode που ικανοποιούν ένα κατηγόρημα.

κρυπτο/αες

Επιστρεφόμενη αξία NewChipher δεν εφαρμόζει πλέον τις μεθόδους NewCTR, NewGCM, NewCBCEncrypter και NewCBCDecrypter. Αυτές οι μέθοδοι ήταν μη τεκμηριωμένες και δεν ήταν διαθέσιμες σε όλες τις αρχιτεκτονικές. Τώρα το νόημα Αποκλεισμός πρέπει να περάσει απευθείας στις κατάλληλες λειτουργίες κρυπτο/κρυπτογράφηση. Επί του παρόντος, το crypto/cipher εξακολουθεί να ελέγχει αυτές τις μεθόδους στις τιμές Block, παρόλο που δεν υποστηρίζονται πλέον από την τυπική βιβλιοθήκη.

κρυπτο/κρυπτογράφηση

Νέα δυνατότητα NewGCMWithRandomNonce επιστρέφει ΑΕΑΔ, το οποίο υλοποιεί το AES-GCM δημιουργώντας ένα τυχαίο nonce κατά τη διάρκεια του Seal και προσαρτώντας το στο κρυπτογραφημένο κείμενο.

Реализация Ρεύμα, επέστρεψε Νέο CTR όταν χρησιμοποιείται με κρυπτο/αες τώρα αρκετές φορές πιο γρήγορα σε amd64 και arm64.

NewOFB, Νέος κρυπτογραφητής CFBE и Νέος αποκρυπτογραφητής CFB έχουν πλέον κηρυχθεί απαρχαιωμένες. Οι λειτουργίες OFB και CFB δεν έχουν έλεγχο ταυτότητας, κάτι που γενικά επιτρέπει στις ενεργές επιθέσεις να χειρίζονται και να ανακτούν απλό κείμενο. Συνιστάται η χρήση εφαρμογών ΑΕΑΔ σε αντάλλαγμα. Εάν δεν υπάρχει έλεγχος ταυτότητας Ρεύμα απαραίτητο, μπορεί να χρησιμοποιηθεί Νέο CTR σε αντάλλαγμα.

crypto/ecdsa

PrivateKey.Sign δημιουργεί τώρα μια ντετερμινιστική υπογραφή σύμφωνα με RFC 6979, εάν η πηγή τυχαίας είναι μηδενική.

crypto/md5

Επιστρεφόμενη αξία md5.νέο, τώρα υλοποιεί επίσης τη διεπαφή encoding.binaryappender.

crypto/rand

Λειτουργία Διάβασε τώρα δεν εγγυάται καμία αποτυχία. Εάν το Read αντιμετωπίσει σφάλμα κατά την ανάγνωση Αναγνώστης, το πρόγραμμα θα τερματιστεί οριστικά. Σημειώστε ότι το προεπιλεγμένο πρόγραμμα ανάγνωσης τεκμηριώνεται ότι λειτουργεί πάντα με επιτυχία, επομένως αυτή η αλλαγή θα πρέπει να επηρεάζει μόνο τα προγράμματα που παρακάμπτουν τη μεταβλητή Reader. Μια εξαίρεση είναι οι πυρήνες Linux πριν από την έκδοση 3.17, όπου ο προεπιλεγμένος Αναγνώστης εξακολουθεί να ανοίγει το /dev/urandom και μπορεί να αποτύχει.

Σε Linux 6.11 και μεταγενέστερες εκδόσεις, το Reader χρησιμοποιεί πλέον την κλήση συστήματος getrandom μέσω vDSO. Αυτό είναι αρκετές φορές πιο γρήγορο, συνήθως για μικρές αναγνώσεις.

Στο OpenBSD Reader χρησιμοποιεί πλέον το arc4random_buf(3).

Νέα δυνατότητα Κείμενο μπορεί τώρα να δημιουργήσει κρυπτογραφικά ασφαλείς τυχαίες συμβολοσειρές κειμένου.

crypto/rsa

GenerateKey τώρα επιστρέφει ένα σφάλμα εάν ζητηθεί μήκος κλειδιού μικρότερο από 1024 bit. Όλες οι μέθοδοι Υπογραφή, Επαλήθευση, Κρυπτογράφηση και Αποκρυπτογράφηση επιστρέφουν τώρα ένα σφάλμα εάν χρησιμοποιούνται με μέγεθος κλειδιού μικρότερο από 1024 bit. Τέτοια κλειδιά δεν είναι ασφαλή και δεν πρέπει να χρησιμοποιούνται. Ρύθμιση του GODEBUG Το rsa1024min=0 επαναφέρει την παλιά συμπεριφορά, αλλά οι προγραμματιστές Go συνιστούν να το κάνετε αυτό μόνο όταν είναι απαραίτητο και μόνο σε δοκιμές, για παράδειγμα προσθέτοντας τη γραμμή //go:debug rsa1024min=0 στο αρχείο δοκιμής. Νέος παράδειγμα Το GenerateKey παρέχει ένα εύκολο στη χρήση τυπικό κλειδί δοκιμής 2024-bit.

Είναι πλέον ασφαλέστερο και πιο αποτελεσματικό να καλέσετε PrivateKey.Precompute να PrivateKey.Validate. Ο προυπολογισμός είναι πλέον ταχύτερος παρουσία μερικώς γεμισμένου Προυπολογισμένες Τιμές, για παράδειγμα κατά την εξαγωγή ενός κλειδιού από JSON.

Το πακέτο απορρίπτει πλέον περισσότερα μη έγκυρα κλειδιά ακόμα και όταν δεν καλείται το Validate, και GenerateKey μπορεί τώρα να επιστρέψει νέα σφάλματα για κατεστραμμένες πηγές τυχαίας. Πεδία Πρωταρχικά и Προυπολογισμένο τη δομή PrivateKey χρησιμοποιούνται πλέον και επικυρώνονται ακόμη και όταν λείπουν κάποιες τιμές. Υπάρχουν επίσης αλλαγές στο crypto/x509 για ανάλυση και εξαγωγή κλειδιών RSA, που περιγράφονται παρακάτω.

SignPKCS1v15 и Επαληθεύστε PKCS1v15 τώρα υποστηρίζουν SHA-512/224, SHA-512/256 και SHA-3.

GenerateKey τώρα χρησιμοποιεί μια ελαφρώς διαφορετική μέθοδο για να δημιουργήσει τον ιδιωτικό εκθέτη (συνάρτηση Carmichael αντί για συνάρτηση Euler). Σπάνιες εφαρμογές που αναπαράγουν εξωτερικά κλειδιά μόνο από πρώτους αριθμούς μπορεί να παράγουν διαφορετικά αλλά συμβατά αποτελέσματα.

Οι λειτουργίες σε δημόσια και ιδιωτικά κλειδιά είναι τώρα έως και δύο φορές ταχύτερες στο wasm.

crypto/sha*

κρυπτό/λεπτό

Νέα δυνατότητα WithDataIndependentTiming επιτρέπει στο χρήστη να εκτελέσει μια συνάρτηση με ενεργοποιημένα χαρακτηριστικά ειδικά για την αρχιτεκτονική που διασφαλίζουν ότι ορισμένες οδηγίες δεν αλλάζουν σε σχέση με τον χρόνο της τιμής δεδομένων. Αυτό μπορεί να χρησιμοποιηθεί για να διασφαλιστεί ότι ο κώδικας που έχει γραφτεί για εκτέλεση σε σταθερό χρόνο δεν έχει βελτιστοποιηθεί από συναρτήσεις σε επίπεδο επεξεργαστή, ώστε να εκτελείται σε μεταβλητό χρόνο. Επί του παρόντος, το WithDataIndependentTiming χρησιμοποιεί το bit PSTATE.DIT στο arm64 και δεν κάνει τίποτα σε όλες τις άλλες αρχιτεκτονικές. Ρύθμιση του GODEBUG Το dataindependenttiming=1 ενεργοποιεί τη λειτουργία DIT για ολόκληρο το πρόγραμμα Go.

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

crypto/tls

Ο διακομιστής TLS υποστηρίζει πλέον το Encrypted Client Hello (ECH). Αυτή η δυνατότητα μπορεί να ενεργοποιηθεί συμπληρώνοντας το πεδίο. Config.EncryptedClientHelloKeys.

Ένας νέος μετα-κβαντικός μηχανισμός ανταλλαγής κλειδιών X25519MLKEM768 τώρα υποστηρίζεται και ενεργοποιείται από προεπιλογή όταν Config.CurvePreferences είναι μηδέν. Ρύθμιση του GODEBUG Το tlsmlkem=0 επιστρέφει την προεπιλογή.

Η υποστήριξη για την πειραματική ανταλλαγή κλειδιών X25519Kyber768Draft00 καταργήθηκε.

Η παραγγελία ανταλλαγής κλειδιών διεκπεραιώνεται πλέον εξ ολοκλήρου από το πακέτο crypto/tls. Παραγγελία Config.CurvePreferences τώρα αγνοείται και τα περιεχόμενα χρησιμοποιούνται μόνο για να καθοριστεί ποιες ανταλλαγές κλειδιών θα συμπεριληφθούν όταν γεμίσει το πεδίο.

Νέο πεδίο ClientHelloInfo.Extensions Εμφανίζει τη λίστα με τα αναγνωριστικά επεκτάσεων που ελήφθησαν στο μήνυμα Client Hello. Αυτό μπορεί να είναι χρήσιμο για τη λήψη δακτυλικών αποτυπωμάτων σε πελάτες TLS.

crypto/x509

Ρύθμιση του GODEBUG Το x509sha1 έχει αφαιρεθεί. Πιστοποίηση.Επαλήθευση δεν υποστηρίζει πλέον υπογραφές που βασίζονται στο SHA-1.

OID τώρα υλοποιεί διεπαφές encoding.binaryappender и κωδικοποίηση.TextAppender.

Το προεπιλεγμένο πεδίο πολιτικής πιστοποιητικού έχει αλλάξει από Certificate.PolicyIdentifiers επί Πιστοποιητικό.Πολιτικές. Κατά την ανάλυση πιστοποιητικών, θα συμπληρώνονται και τα δύο πεδία, αλλά κατά τη δημιουργία μιας πολιτικής πιστοποιητικών, θα λαμβάνονται από το πεδίο Certificate.Policies αντί για Certificate.PolicyIdentifiers. Αυτή η αλλαγή μπορεί να αναστραφεί. Ρύθμιση GODEBUG x509usepolicies=0.

Δημιουργία Πιστοποιητικού θα δημιουργήσει τώρα έναν σειριακό αριθμό χρησιμοποιώντας μια μέθοδο συμβατή με το RFC 5280 κατά τη μετάδοση ενός πεδίου προτύπου Πιστοποιητικό.Αριθμός σειράς μηδέν, αντί να συντριβεί.

Πιστοποιητικό.Επαλήθευση υποστηρίζει πλέον επικύρωση πολιτικής όπως ορίζεται στα RFC 5280 και RFC 9618. Νέο πεδίο VerifyOptions.CertificatePolicies μπορεί να οριστεί σε ένα αποδεκτό σύνολο πολιτικών OIDs. Θα επιστραφούν μόνο αλυσίδες πιστοποιητικών με έγκυρα γραφήματα πολιτικής Πιστοποιητικό.Επαλήθευση.

MarshalPKCS8PrivateKey τώρα επιστρέφει ένα σφάλμα αντί να ανακτήσει ένα μη έγκυρο κλειδί RSA. (MarshalPKCS1PrivateKey δεν έχει επιστροφή σφάλματος και η συμπεριφορά του όταν παρέχονται μη έγκυρα κλειδιά παραμένει απροσδιόριστη.)

ParsePKCS1PrivateKey и ParsePKCS8PrivateKey τώρα χρησιμοποιήστε και επικυρώστε τις κωδικοποιημένες τιμές CRT, ώστε να μπορείτε να απορρίψετε μη έγκυρα κλειδιά RSA που ήταν προηγουμένως αποδεκτά. Χρήση Ρυθμίσεις GODEBUG Το x509rsacrt=0 επιστρέφει στον επανυπολογισμό των τιμών CRT.

εντοπισμός σφαλμάτων/ξωτικό

Πακέτο εντοπισμός σφαλμάτων/ξωτικό Προσθέτει υποστήριξη για το χειρισμό εκδόσεων συμβόλων σε δυναμικά αρχεία ELF (Εκτέλεση και Συνδέσιμη Μορφή). Νέα μέθοδος File.DynamicVersions Επιστρέφει μια λίστα δυναμικών εκδόσεων που ορίζονται σε ένα αρχείο ELF. Νέα μέθοδος File.DynamicVersionNeeds Επιστρέφει μια λίστα δυναμικών εκδόσεων που απαιτούνται από αυτό το αρχείο ELF που ορίζονται σε άλλα αντικείμενα ELF. Επιτέλους νέα πεδία Symbol.HasVersion и Symbol.VersionIndex υποδεικνύουν την έκδοση του συμβόλου.

κωδικοποίησης

Δύο νέες διεπαφές TextAppender и BinaryAppender εισήχθησαν για την προσθήκη κειμένου ή δυαδικής αναπαράστασης ενός αντικειμένου σε ένα κομμάτι byte. Αυτές οι διεπαφές παρέχουν την ίδια λειτουργικότητα όπως TextMarshaler и BinaryMarshaler, αλλά αντί να εκχωρούν ένα νέο τμήμα κάθε φορά, προσαρτούν δεδομένα απευθείας σε ένα υπάρχον τμήμα. Αυτές οι διεπαφές υλοποιούνται επί του παρόντος από τυπικούς τύπους βιβλιοθηκών που εφαρμόζουν ήδη το TextMarshaler ή/και το BinaryMarshaler.

κωδικοποίηση/json

Κατά τη δημιουργία, ένα πεδίο δομής με τη νέα επιλογή omitzero στην ετικέτα πεδίου δομής θα παραληφθεί εάν η τιμή του είναι μηδέν. Εάν ο τύπος πεδίου έχει μια μέθοδο bool IsZero(), θα χρησιμοποιηθεί για να προσδιοριστεί εάν η τιμή είναι μηδέν. Διαφορετικά η τιμή θα είναι μηδέν εάν είναι μηδενική τιμή για τον τύπο του. Η ετικέτα πεδίου "Omitzero" είναι πιο καθαρή και λιγότερο επιρρεπής σε σφάλματα από την παράλειψη όταν η πρόθεση είναι να παραληφθούν μηδενικές τιμές. Συγκεκριμένα, σε αντίθεση με το omitempty, το omitzero παραλείπει τα μηδενικά ώρα.ώρα αξίες, που αποτελεί κοινή πηγή προβλημάτων.

Εάν έχουν καθοριστεί και τα δύο omitempty και omitzero, το πεδίο θα παραλειφθεί εάν η τιμή είναι κενή ή μηδενική (ή και τα δύο).

UnmarshalTypeError.Field τώρα περιλαμβάνει ενσωματωμένες δομές για την παροχή πιο λεπτομερών μηνυμάτων σφάλματος.

πηγαίνω/τύπους

Όλες οι δομές δεδομένων go/types που εκθέτουν ακολουθίες ζευγών μεθόδων, όπως η Len() int και η At(int) T, έχουν πλέον επίσης μεθόδους που επιστρέφουν επαναλήπτες, επιτρέποντας απλούστερο κώδικα όπως αυτός:

params := fn.Type.(*types.Signature).Params() for i := 0; i < params.Len(); i++ { use(params.At(i)) }

Σε αυτό:

για param := range fn.Signature().Params().Variables() { use(param) }

Μέθοδοι: Interface.EmbeddedTypes Interface.ExplicitMethods Διασύνδεση.Μέθοδοι MethodSet.Methods Όνομα.Μέθοδοι Πεδίο εφαρμογής.Παιδιά Δομή.Πεδία Πλειάδα.Μεταβλητές TypeList.Types TypeParamList.TypeParams Ένωση.Όροι

χασίσι/*

log/slog

νέος DiscardHandler είναι ένας χειριστής που δεν ενεργοποιείται ποτέ και απορρίπτει πάντα την έξοδο του.

Επίπεδο и LevelVar εφαρμόστε τώρα τη διεπαφή κωδικοποίηση.TextAppender.

μαθηματικά/*

καθαρά

Άκουσε Κόντιγκ χρησιμοποιεί πλέον το MPTCP από προεπιλογή σε συστήματα όπου υποστηρίζεται (προς το παρόν μόνο Linux).

IP τώρα υλοποιεί τη διεπαφή κωδικοποίηση.TextAppender.

net/http

Ο περιορισμός έχει αλλάξει Μεταφορά στις ληφθείσες απαντήσεις πληροφοριών 1xx ως απάντηση στο αίτημα. Παλαιότερα, αυτό θα σταματούσε το αίτημα και θα επέστρεφε ένα σφάλμα μετά τη λήψη περισσότερων από 5 απαντήσεων 1xx. Αυτό τώρα επιστρέφει ένα σφάλμα μόνο εάν το συνολικό μέγεθος όλων των αποκρίσεων 1xx υπερβαίνει τη ρύθμιση διαμόρφωσης Transport.MaxResponseHeaderBytes.

Επίσης, όταν ένα αίτημα έχει άγκιστρο παρακολούθησης net/http/httptrace.ClientTrace.Got1xxResponse, τώρα δεν υπάρχει όριο στον συνολικό αριθμό των απαντήσεων 1xx. Το άγκιστρο Got1xxResponse μπορεί να επιστρέψει ένα σφάλμα για να σταματήσει το αίτημα.

Μεταφορά и διακομιστή τώρα έχετε ένα πεδίο HTTP2 που επιτρέπει τη διαμόρφωση των ρυθμίσεων πρωτοκόλλου HTTP/2.

Νέα πεδία Διακομιστής.Πρωτόκολλα и Μεταφορές.Πρωτόκολλα παρέχει έναν απλό τρόπο για να ρυθμίσετε ποια πρωτόκολλα HTTP χρησιμοποιεί ο διακομιστής ή ο πελάτης.

Ο διακομιστής και ο πελάτης μπορούν να ρυθμιστούν ώστε να υποστηρίζουν μη κρυπτογραφημένες συνδέσεις HTTP/2.

Όταν Διακομιστής.Πρωτόκολλα περιέχει UnencrypterHTTP2, ο διακομιστής θα δέχεται συνδέσεις HTTP/2 σε μη κρυπτογραφημένες θύρες. Ο διακομιστής μπορεί να δεχτεί τόσο HTTP/1 όσο και μη κρυπτογραφημένο HTTP/2 στην ίδια θύρα.

Όταν Μεταφορές.Πρωτόκολλα περιέχει UnencryptedHTTP2 και δεν περιέχει HTTP1, η μεταφορά θα χρησιμοποιεί μη κρυπτογραφημένο HTTP/2 για διευθύνσεις http://. Εάν μια μεταφορά έχει ρυθμιστεί ώστε να χρησιμοποιεί τόσο HTTP/1 όσο και μη κρυπτογραφημένο HTTP/2, θα χρησιμοποιεί HTTP/1.

Η υποστήριξη για μη κρυπτογραφημένο HTTP/2 χρησιμοποιεί το "HTTP/2 with Forward-Learning" (RFC 9113, ενότητα 3.3). Η καταργημένη κεφαλίδα "Αναβάθμιση: h2c" δεν υποστηρίζεται.

net/netip

Προσθήκη, AdrPort и Πρόθεμα τώρα εφαρμόστε τις διεπαφές encoding.binaryappender и κωδικοποίηση.TextAppender.

net/url

URL τώρα υλοποιεί επίσης τη διεπαφή encoding.binaryappender.

λειτουργικό σύστημα/χρήστη

Στα Windows Ρεύμα μπορεί πλέον να χρησιμοποιηθεί στον Windows Nano Server. Η υλοποίηση έχει ενημερωθεί για να αποφευχθεί η χρήση συναρτήσεων από τη βιβλιοθήκη NetApi32, η οποία λείπει από τον Nano Server.

Στα Windows Ρεύμα, Lookup и Αναγνωριστικό αναζήτησης υποστηρίζει πλέον τους ακόλουθους ενσωματωμένους λογαριασμούς υπηρεσιών χρήστη:

  • NT ΑΡΧΗ ΣΥΣΤΗΜΑΤΟΣ
  • NT ΑΡΧΗ ΤΟΠΙΚΗ ΥΠΗΡΕΣΙΑ
  • ΥΠΗΡΕΣΙΑ ΔΙΚΤΥΟΥ NT ΑΡΧΗ

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

Στα Windows Ρεύμα επιστρέφει τώρα τον χρήστη κατόχου διεργασίας όταν το τρέχον νήμα πλαστοπροσωπεί έναν άλλο χρήστη. Προηγουμένως, αυτό επέστρεφε ένα σφάλμα.

regexp

Regexp τώρα υλοποιεί τη διεπαφή κωδικοποίηση.TextAdapter.

runtime

Λειτουργία GOROOT έχει πλέον καταργηθεί. Σε νεότερα περιβάλλοντα, θα πρέπει να προτιμάτε να χρησιμοποιείτε τη διαδρομή συστήματος για να προσδιορίσετε το δυαδικό "go" και να χρησιμοποιήσετε το go env GOROOT για να προσδιορίσετε το GOROOT.

χορδές

Πακέτο χορδές προσθέτει πολλές λειτουργίες για εργασία με επαναλήπτες:

  • γραμμές Επιστρέφει έναν επαναλήπτη σε γραμμές που χωρίζονται από νέες γραμμές σε μια συμβολοσειρά.
  • SplitSeq επιστρέφει έναν επαναλήπτη σε όλες τις υποσυμβολοσειρές μιας συμβολοσειράς που χωρίζονται από ένα διαχωριστικό.
  • SplitAfterSeq επιστρέφει έναν επαναλήπτη σε υποσυμβολοσειρές μιας συμβολοσειράς, που χωρίζεται μετά από κάθε εμφάνιση του διαχωριστή.
  • FieldsSeq επιστρέφει έναν επαναλήπτη πάνω από υποσυμβολοσειρές μιας συμβολοσειράς γύρω από ακολουθίες χαρακτήρων κενού διαστήματος, όπως ορίζεταιunicode.IsSpace
  • FieldsFuncSeq Επιστρέφει έναν επαναλήπτη σε υποσυμβολοσειρές συμβολοσειρών γύρω από ακολουθίες σημείων κώδικα Unicode που ικανοποιούν ένα κατηγόρημα.

συγχρονισμό

Реализация συγχρονισμός χάρτη έχει αλλάξει για να βελτιώσει την απόδοση, ιδιαίτερα για αλλαγές λεξικού. Για παράδειγμα, η διαμάχη αλλαγής ασύνδετου συνόλου είναι λιγότερο πιθανή σε μεγάλα λεξικά και δεν απαιτεί πλέον χρόνο δημιουργίας για να επιτευχθεί χαμηλός φόρτος λεξικού.

Εάν αντιμετωπίσετε προβλήματα, ρυθμίστε το GOEXPERIMENT=nosynchashtriemap κατά τη διάρκεια της κατασκευής για να επιστρέψετε στην παλιά υλοποίηση και παρακαλούμε συμπληρώστε τη φόρμα προβλήματος.

δοκιμών

Νέα μέθοδος Τ.Πλαίσιο и Β.Πλαίσιο επιστρέψτε ένα περιβάλλον που απορρίπτεται μετά την ολοκλήρωση της δοκιμής και πριν από την εκτέλεση των λειτουργιών εκκαθάρισης δοκιμής.

Νέα μέθοδος Τ.Χδίρ и B.Chdir μπορεί να χρησιμοποιηθεί για την αλλαγή του καταλόγου εργασίας κατά τη διάρκεια μιας δοκιμής ή συγκριτικής αξιολόγησης.

κείμενο/πρότυπο

Τα πρότυπα υποστηρίζουν πλέον range-over-func και range-over-int.

ώρα

Χρόνος τώρα υλοποιεί διεπαφές encoding.binaryappender и κωδικοποίηση.TextAppender.

λιμάνια

Linux

Οπως ήταν ανακοινώθηκε Σύμφωνα με τις σημειώσεις έκδοσης Go 1.23, το Go 1.24 απαιτεί την έκδοση 3.2 του πυρήνα Linux ή νεότερη.

Ο Δαρβίνος

Το Go 1.24 είναι η τελευταία έκδοση που θα τρέχει στο macOS 11 Big Sur. Το Go 1.25 θα απαιτεί macOS 12 Monterey ή μεταγενέστερο.

WebAssembly

Η οδηγία μεταγλωττιστή go:wasmexport έχει προστεθεί στα προγράμματα Go για εξαγωγή συναρτήσεων στον κεντρικό υπολογιστή WebAssembly.

Στην προεπισκόπηση διασύνδεσης συστήματος WebAssembly 1 (GOOS=wasip1 GOARCH=wasm), το Go 1.24 υποστηρίζει τη δημιουργία ενός προγράμματος Go ως αντιδραστήρα/βιβλιοθήκη καθορίζοντας τη σημαία κατασκευής -buildmode=c-shared.

Περισσότεροι τύποι επιτρέπονται πλέον ως τύποι ορισμάτων ή αποτελεσμάτων για τις συναρτήσεις go:wasmimport. Συγκεκριμένα, επιτρέπονται bool, string, uintptr και δείκτες σε ορισμένους τύπους (δείτε λεπτομέρειες στο τεκμηρίωση), μαζί με τους τύπους ακέραιου και κινητής υποδιαστολής 32-bit και 64-bit, και το unsafe.Pointer, που επιτρέπονται ήδη. Αυτοί οι τύποι επιτρέπονται επίσης ως τύποι ορισμάτων ή αποτελεσμάτων για συναρτήσεις go:wasmexport.

Τα αρχεία υποστήριξης για το WebAssembly έχουν μετακινηθεί στο lib/wasm από το misc/wasm.

Το αρχικό αποτύπωμα μνήμης μειώνεται σημαντικά, ειδικά για μικρές εφαρμογές WebAssembly.

Windows

Η θύρα 32-bit windows/arm (GOOS=windows GOARCH=arm) έχει επισημανθεί ως κατεστραμμένη. Λεπτομέρειες στο #70705

Πηγή: linux.org.ru

Προσθέστε ένα σχόλιο