Console Go

Compilatore Go online gratuito: scrivi e testa il tuo codice Go direttamente nel browser

Go è uno dei linguaggi di programmazione più interessanti degli ultimi anni: nato in Google, progettato per essere semplice da imparare ma abbastanza potente da gestire sistemi distribuiti, microservizi e applicazioni ad alte prestazioni. Con un compilatore Go online puoi iniziare a scrivere e far girare il tuo primo codice Go senza installare nulla, senza configurare un ambiente di sviluppo e senza perdere tempo in operazioni preliminari.

L'editor Go di Biadets è completamente gratuito e accessibile da qualsiasi browser. Che tu stia avvicinandoti a Go per la prima volta o che tu voglia testare rapidamente un'idea, questo strumento ti dà tutto quello che ti serve in un'unica schermata.

Perché Go è un linguaggio che vale la pena conoscere

Go, conosciuto anche come Golang, è stato creato da Google nel 2007 e rilasciato pubblicamente nel 2009. I suoi autori avevano un obiettivo preciso: un linguaggio compilato, con prestazioni vicine a C, ma con una sintassi pulita e leggibile come quella di Python e con il supporto nativo alla programmazione concorrente.

Il risultato è un linguaggio che occupa una posizione unica nel panorama attuale. Non è né uno scripting language né un linguaggio di sistema puro: è qualcosa di intermedio, pensato per costruire software affidabile, veloce e manutenibile. Per questo Go è diventato il linguaggio di riferimento per infrastrutture cloud, tool da riga di comando, server ad alte prestazioni e sistemi distribuiti. Docker, Kubernetes e Terraform sono scritti in Go: tre strumenti che hanno cambiato il modo in cui si costruisce e distribuisce il software moderno.

Imparare Go significa acquisire competenze concrete e molto richieste nel mercato del lavoro, in un linguaggio che ha ancora davanti a sé una traiettoria di crescita importante.

Le caratteristiche che distinguono Go dagli altri linguaggi

Prima di entrare nel codice Go vero e proprio, vale la pena capire cosa rende Go diverso dagli altri linguaggi che potresti già conoscere.

La prima cosa che si nota è la semplicità voluta. Go ha pochissime parole chiave, nessuna gerarchia di classi, nessun meccanismo di ereditarietà. Questa scelta non è una limitazione ma una filosofia: meno costrutti da imparare significano meno ambiguità, codice più leggibile e team che si capiscono meglio. In molte aziende, Go viene scelto proprio perché il codice scritto da dieci sviluppatori diversi tende a somigliarsi molto, rendendo la manutenzione più semplice nel tempo.

La seconda caratteristica distintiva è la compilazione velocissima. Go compila in pochi secondi anche progetti di grandi dimensioni, producendo un eseguibile singolo e autonomo che non richiede dipendenze esterne per girare. Questo lo rende ideale per il deployment in ambienti cloud e containerizzati.

La terza, forse la più innovativa, è il supporto nativo alla concorrenza tramite le goroutine e i channel. Gestire operazioni parallele in Go è molto più semplice e sicuro che in altri linguaggi, e questo apre possibilità che in altri contesti richiederebbero librerie esterne complesse.

La struttura di un programma Go: il punto di partenza

Ogni programma scritto in codice Go ha una struttura di base che vale la pena conoscere subito. A differenza di alcuni linguaggi che permettono di scrivere istruzioni direttamente senza una struttura formale, Go richiede sempre un punto di ingresso esplicito.

package main

import "fmt"

func main() {
  fmt.Println("Ciao, mondo!")
}

La prima riga definisce il package di appartenenza del file. In Go, il codice è organizzato in package: il package main è speciale perché indica al compilatore che questo file contiene il punto di ingresso del programma.

La seconda parte è l'import: Go ha una libreria standard ricchissima, e per usarla basta importare il package corrispondente. fmt è il package per la formattazione e la stampa di testo.

La funzione main() è il cuore del programma: è la prima funzione che viene eseguita quando lanci il codice Go. Tutto quello che scrivi dentro di essa viene eseguito in sequenza.

Variabili e tipi: un sistema rigoroso ma intelligente

Go è un linguaggio con tipizzazione statica: ogni variabile ha un tipo definito e non può cambiarlo durante l'esecuzione. Questo può sembrare rigido, ma in realtà è uno dei meccanismi che rende il codice Go affidabile: molti errori vengono intercettati dal compilatore prima ancora che il programma venga eseguito.

Puoi dichiarare una variabile in modo esplicito, specificando il tipo:

var nome string = "Marco"
var eta int = 30
var altezza float64 = 1.78

Oppure usare la forma abbreviata con :=, che lascia al compilatore il compito di inferire il tipo dal valore assegnato:

nome := "Marco"
eta := 30
altezza := 1.78

La seconda forma è quella più usata nella pratica quotidiana, perché è più concisa senza rinunciare alla sicurezza dei tipi. Il compilatore Go verifica comunque che tutto sia coerente, e ti avvisa se stai cercando di fare operazioni tra tipi incompatibili.

Una particolarità di Go che sorprende chi arriva da altri linguaggi è che il compilatore segnala un errore se dichiari una variabile senza usarla. È una scelta deliberata: niente variabili inutili nel codice, niente confusione.

Le funzioni in Go: semplici, potenti e con una caratteristica unica

Le funzioni si definiscono con la parola chiave func, seguita dal nome, dai parametri e dal tipo di ritorno:

func somma(a int, b int) int {
  return a + b
}

risultato := somma(5, 3)
fmt.Println(risultato) // 8

Una caratteristica di Go che distingue questo linguaggio da quasi tutti gli altri è la possibilità di restituire valori multipli da una funzione. È una funzionalità usatissima, soprattutto per gestire gli errori:

func dividi(a float64, b float64) (float64, error) {
  if b == 0 {
    return 0, fmt.Errorf("impossibile dividere per zero")
  }
  return a / b, nil
}

risultato, err := dividi(10, 2)
if err != nil {
  fmt.Println("Errore:", err)
} else {
  fmt.Println(risultato)
}

Questo pattern, dove una funzione restituisce il valore atteso e un eventuale errore, è la convenzione standard in Go per la gestione degli errori. Non esistono eccezioni nel senso tradizionale del termine: gli errori sono valori normali, da controllare esplicitamente. All'inizio può sembrare verboso, ma porta a un codice molto più prevedibile e trasparente.

Struct e interfacce: la programmazione orientata agli oggetti secondo Go

Go non ha classi nel senso tradizionale, ma ha le struct: tipi di dato composti che raggruppano più campi sotto un unico nome. Sono il modo principale per modellare entità del mondo reale nel codice Go.

type Utente struct {
  Nome  string
  Email string
  Eta   int
}

u := Utente{Nome: "Laura", Email: "[email protected]", Eta: 27}
fmt.Println(u.Nome) // "Laura"

Puoi associare funzioni a una struct definendo dei metodi, usando quello che Go chiama receiver:

func (u Utente) Saluta() string {
  return "Ciao, sono " + u.Nome
}

Le interfacce definiscono insiemi di metodi che un tipo deve implementare. In Go non dichiari esplicitamente che un tipo implementa un'interfaccia: se un tipo ha tutti i metodi richiesti, l'interfaccia è soddisfatta automaticamente. Questa caratteristica, chiamata duck typing statico, rende il codice estremamente flessibile senza sacrificare la sicurezza dei tipi.

Le goroutine: la concorrenza resa semplice

Una delle ragioni principali per cui molti sviluppatori scelgono Go è la gestione della concorrenza. Le goroutine sono funzioni che vengono eseguite in modo concorrente rispetto al resto del programma. Avviarle è semplicissimo: basta aggiungere la parola chiave go davanti a una chiamata di funzione.

func stampa(messaggio string) {
  fmt.Println(messaggio)
}

go stampa("Questa funzione gira in parallelo")
stampa("Questa funzione gira normalmente")

Le goroutine sono molto più leggere dei thread tradizionali: puoi avviarne migliaia contemporaneamente senza saturare la memoria. La comunicazione tra goroutine avviene tramite i channel, che permettono di passare valori da una goroutine all'altra in modo sicuro e sincronizzato, evitando i problemi di concorrenza tipici di altri linguaggi.

Questo sistema rende Go particolarmente adatto per costruire server web ad alte prestazioni, elaborare file di grandi dimensioni in parallelo, gestire code di messaggi e qualsiasi scenario in cui più operazioni devono procedere contemporaneamente.

Il compilatore Go è completamente gratuito

L'editor Go di Biadets non ha alcun costo. Nessun account richiesto, nessun limite di utilizzo, nessuna funzionalità riservata a versioni a pagamento. Puoi usarlo liberamente per esplorare la sintassi, testare algoritmi, capire come funzionano le goroutine o sperimentare con le struct.

La possibilità di scrivere codice Go direttamente nel browser ha un valore concreto soprattutto nelle fasi iniziali di apprendimento. Installare Go sul proprio computer, configurare le variabili d'ambiente e impostare un progetto richiede alcuni passaggi che potrebbero scoraggiare chi vuole semplicemente capire come funziona il linguaggio. Con il compilatore online tutto questo non è necessario: si apre il browser e si inizia a scrivere.

Go nel mondo reale: dove si usa e perché conviene impararlo

Conoscere Go apre porte concrete nel mercato del lavoro. Le aziende che usano Go in produzione sono spesso realtà tecnologiche di primo piano: oltre a Google, che lo ha creato, lo usano Uber, Dropbox, Twitch, Cloudflare e molte altre. La richiesta di sviluppatori Go è cresciuta costantemente negli ultimi anni e la tendenza non accenna a invertirsi.

Gli ambiti in cui Go è particolarmente diffuso sono lo sviluppo di API e microservizi, la creazione di tool da riga di comando, l'ingegneria delle infrastrutture cloud e tutto ciò che ruota attorno a Kubernetes e ai container. Se hai già esperienza con altri linguaggi e vuoi espandere il tuo profilo verso il backend e il cloud, Go è una delle scelte più solide che tu possa fare.

E per cominciare a esplorarlo, non ti serve altro che un browser e il compilatore Go gratuito di Biadets.