
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 es 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 a cada iteració. A Go 1.22, cada iteració del bucle crea noves variables per evitar errors de compartició accidental, a més d'això s'ha afegit suport experimental (GOEXPERIMENT=rangefunc) per a funcions de rang a bucles for, el 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 a corrutines compartissin variables de bucle entre iteracions. 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 «venedor« que conté les dependències de lespai 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` a «venedor«, sent aquest el valor predeterminat quan existeix un directori «venedor» a l'espai de treball.
És important assenyalar que la funcionalitat de `ves i aconsegueix` ja no és compatible fora d'un mòdul en 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, l'ordre `go mod init` ja no intentareu importar els requisits del mòdul des de fitxers 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 lexecució 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%.
En 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 podeu utilitzar l'API de registre d'esdeveniments de Windows (ETW) a través dels nous paquets de runtime/trace y tracehook, que implementen el protocol de recopilació de traces d'esdeveniments Go com a proveïdor ETW.
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 hi ets interessat a poder conèixer més sobre això, pots consultar els detalls en el següent enllaç.