È stata presentata la versione 1.22 del linguaggio di programmazione Go, sviluppato da Google con la partecipazione della comunità, come soluzione ibrida che unisce l'alta performance dei linguaggi compilati con i vantaggi dei linguaggi di scripting, come la facilità di scrittura del codice, la rapidità di sviluppo e la protezione dagli errori. Il codice del progetto è distribuito con licenza BSD.
La sintassi di Go si basa su elementi familiari del linguaggio C, con alcune influenze dal linguaggio Oberon. Il linguaggio è abbastanza conciso, ma il codice è facilmente leggibile e comprensibile. Il codice scritto in Go viene compilato in file binari eseguibili autonomi, eseguiti nativamente senza l'uso di una macchina virtuale (i moduli di profiling, debugging e altre sottosistemi di rilevamento dei problemi sono integrati come componenti runtime), il che consente di raggiungere prestazioni comparabili a quelle dei programmi scritti in 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.
Tra le novità della nuova versione:
- Nei cicli «for» è stata aggiunta la supporto per la definizione di intervalli di numeri interi, ad esempio, per iterare valori da 0 a 9 ora si può utilizzare il ciclo «for i := range 10 {...}».
- Nei cicli «for» è stata aggiunta una supporto sperimentale (GOEXPERIMENT=rangefunc) per le funzioni di definizione dell'intervallo, che consente di specificare una funzione come iteratore. Ad esempio, «for i, x := range slices.Backward(s) {...}»
- Risolta una problematica di lunga data riguardante i cicli «for», che portava a problemi di condivisione delle variabili di ciclo tra diverse iterazioni quando venivano chiamate le goroutine. Ad esempio, il codice values := []string{«a», «b», «c»} for _, v := range values { go func() { fmt.Println(v) done
Fonte: opennet.ru
