rilascio del linguaggio di programmazione , sviluppato da Google con la collaborazione della comunità come una soluzione ibrida che combina l'alta performance dei linguaggi compilati con i vantaggi dei linguaggi di scripting, come la semplicità nella scrittura del codice, la velocità di sviluppo e la protezione contro gli errori. Il codice del progetto con licenza BSD.
La sintassi di Go si basa su elementi familiari del linguaggio C con alcune adozioni dal linguaggio Python. Il linguaggio è abbastanza conciso, ma il codice è facilmente leggibile e comprensibile. Il codice in Go viene compilato in file eseguibili binari separati, eseguiti nativamente senza l'uso di una macchina virtuale (i moduli di profilazione, debug e altri sistemi di rilevamento dei problemi durante l'esecuzione sono integrati come ), consentendo di raggiungere prestazioni paragonabili a quelle dei programmi in linguaggio C.
Il progetto è stato inizialmente sviluppato tenendo conto della programmazione multithreading e dell'efficiente utilizzo di sistemi multicore, fornendo anche strumenti implementati a livello di operatore per organizzare calcoli paralleli e interazioni tra metodi eseguiti in parallelo. Il linguaggio offre anche strumenti integrati per proteggere dalla fuga di memoria e garantisce la possibilità di utilizzare un garbage collector.
Principali , presentati nella release Go 1.14:
- Il nuovo sistema di moduli nella command-line 'go' è stato dichiarato pronto per l'uso generale, abilitato per impostazione predefinita e raccomandato per la gestione delle dipendenze al posto di GOPATH. Il nuovo sistema di moduli offre un supporto integrato per il versioning, strumenti per la distribuzione dei pacchetti e un migliorato sistema di gestione delle dipendenze. Con i moduli, gli sviluppatori non sono più vincolati a lavorare all'interno della struttura GOPATH, possono definire esplicitamente le dipendenze tenendo conto delle versioni e creare build ripetibili.
- supporto per l'integrazione delle interfacce con un insieme sovrapposto di metodi. I metodi dall'interfaccia integrata possono ora avere gli stessi nomi e le stesse firme di quelli già presenti nelle interfacce. I metodi dichiarati esplicitamente rimangono unici come in precedenza.
- Migliorata la prestazione dell'istruzione 'defer', il cui utilizzo ora si avvicina alla velocità della chiamata diretta della funzione ritardata, consentendo di utilizzare il lancio ritardato di funzioni nel codice sensibile alle prestazioni.
- È stata garantita la sostituzione asincrona delle goroutine: ora i cicli senza chiamate a funzioni non possono potenzialmente causare un'interruzione del pianificatore o ritardare l'inizio della raccolta dei rifiuti.
- È stata migliorata l'efficienza del sistema di distribuzione delle pagine di memoria, con un numero notevolmente ridotto di conflitti di blocco nelle configurazioni con valori elevati di GOMAXPROCS. Di conseguenza, sono diminuiti i ritardi e aumentata la larghezza di banda durante la distribuzione intensiva in parallelo di grandi blocchi di memoria.
- Sono state ottimizzate le chiusure e ridotto il numero di cambi di contesto durante l'uso dei timer interni, utilizzati nelle funzioni time.After, time.Tick e net.Conn.SetDeadline.
- Nel comando go, il flag «-mod=vendor» è attivato per default se esiste una directory vendor nella radice, destinata a fornire dipendenze esterne legate a un fornitore specifico. È stato aggiunto un flag separato «-mod=mod» per caricare i moduli dalla cache dei moduli anziché dalla directory «vendor». Se il file go.mod è disponibile solo in lettura, è impostato per default il flag «-mod=readonly» se non esiste la directory superiore «vendor». È stato aggiunto il flag «-modfile=file» per specificare un file go.mod alternativo al posto di quello presente nella directory radice del modulo.
- È stata aggiunta la variabile d'ambiente GOINSECURE, che quando impostata, consente al comando go di non richiedere l'uso di HTTPS e di saltare il controllo dei certificati durante il caricamento diretto dei moduli.
- Nel compilatore è stato aggiunto per default il flag «-d=checkptr» per verificare il codice rispetto alle regole di uso sicuro di unsafe.Pointer.
- Nella distribuzione è incluso un nuovo pacchetto con funzioni hash non crittografiche per la creazione di tabelle hash per sequenze di byte o stringhe arbitrarie.
- È stato aggiunto il supporto sperimentale per la piattaforma RISC-V a 64 bit in Linux.
- È stata aggiunta la supporto per FreeBSD su sistemi ARM a 64 bit.
Fonte: opennet.ru
