Go és un llenguatge de programació concurrent i compilat amb tipat estàtic inspirat en la sintaxi de C
La nova versió de Go 1.22 arriba sis mesos després de la versió 1.21, amb una sèrie de canvis notables en el conjunt d'eines, el runtime, millores d'optimització, millores al compilador i biblioteques.
Per als que desconeixen de Go, els he de dir que aquest és un llenguatge de programació que està sent desenvolupat per Google amb la participació de la comunitat com una solució híbrida que combina l'alt rendiment dels llenguatges compilats amb avantatges com ara els llenguatges de scripting com la facilitat per escriure codi, velocitat de desenvolupament i protecció contra errors.
Principals novetats de Go 1.22
En aquesta nova versió, que s'introdueix de Go 1.22, es destaquen dos canvis als bucles for , ja que anteriorment, les variables declarades per un bucle for es creaven una vegada i s'actualitzaven en cada iteració. A Go 1.22, cada iteració del bucle crea noves variables per evitar errors de compartició accidental, a més d'això es va afegir suport experimental (GOEXPERIMENT=rangefunc) per a funcions de rang a bucles «for», cosa que permet especificar una funció com a iterador i es va resoldre un problema de llarga data amb els bucles for que provocava que les trucades de les bucles for. A més, els bucles for ara poden recórrer sencers. Per exemple:
package main import "fmt" func main() { for i := range 10 { fmt.Println(10 - i) } fmt.Println("go1.22 s'enlaira!") }
Un altre canvi destacat en aquesta nova versió és la introducció de la capacitat d' utilitzar un directori vendor que conté les dependències de l'espai de treball. Ara, les ordres poden emprar aquest directori, el qual es crea amb ` go work vendor ` i s'utilitza en les ordres de compilació quan s'estableix ` -mod ` en " vendor ", i aquest és el valor predeterminat quan hi ha un directori " vendor " a l'espai de treball.
És important assenyalar que la funcionalitat de ` go get ` ja no és compatible fora d' un mòdul en el mode GOPATH heretat No obstant això, altres ordres de compilació com `go build` i `go test` seguiran funcionant indefinidament per a programes GOPATH heretats. A més, la comanda `go mod init` ja no intentarà importar els requisits del mòdul des d'arxius de configuració d'altres eines de vendoring (com Gopkg.lock).
Go 1.22 introdueix un nou paquet io/unsafe que proporciona funcionalitat per treballar amb punters i memòria no segura . Aquest paquet ofereix mètodes per convertir punters ai des de tipus segurs i no segurs, així com per fer operacions de còpia de memòria sense verificar els límits.
Es va continuar treballant per incloure optimitzacions al compilador basades en els resultats del perfilat de codi PGO, i és que ara el compilador utilitza eines de desvirtualització per reemplaçar les trucades indirectes de diversos mètodes amb l'execució de blocs en línia expandits. Quan es va habilitar PGO, el canvi agregat va millorar el rendiment de la majoria dels programes entre un 2 i un 14%.
A la versió de Go per a Windows, els programes que vinculen o carreguen biblioteques Go construïdes amb -buildmode=c-archive o -buildmode=c-shared ara poden utilitzar l'API de registre d'esdeveniments de Windows (ETW) a través dels nous paquets de runtime/trace i tracehook , que implementen el protocol de recopilació de traces.
Dels altres canvis que es destaquen:
- la comanda go test -cover ara imprimeix resums de cobertura per a paquets coberts que no tenen els seus propis fitxers de prova.
- us/exec, s'ha afegit la possibilitat de definir els atributs del context, cosa que permet establir valors com el directori de treball, variables d'entorn i el descriptor de fitxers d'entrada/sortida per a les ordres executades.
- Es va optimitzar la gestió de la memòria al runtime, cosa que es va traduir en un augment del rendiment entre un 1% i un 3% i una reducció del consum de memòria en la majoria de les aplicacions de l'1%.
- El paquete net/http, s'ha afegit la funció CloseIdleConnections al client HTTP, que tanca totes les connexions inactives que el client ha fet servir recentment
- S'ha afegit al compilador una implementació millorada experimental (GOEXPERIMENT=newinliner) del mecanisme d'inserció de trucades, que utilitza heurístiques per separar les operacions importants de les que no ho són.
- S'ha afegit el paquet » math/rand/v2 » a la biblioteca estàndard, que ofereix una API més consistent i utilitza algorismes més ràpids per generar números pseudoaleatoris.
- El paquete net/http.ServeMux ha afegit la capacitat d'especificar mètodes i màscares a plantilles.
Finalment, si estàs interessat a poder conèixer més sobre això, pots consultar els detalls al següent enllaç.