Utilizzo di Go (Golang)
Panoramica
Go, spesso chiamato Golang, è un linguaggio di programmazione compilato e staticamente tipizzato, progettato e rilasciato come open source da Google. È apprezzato per la sua sintassi semplice, la rapidità di compilazione, le eccellenti capacità di gestione della concorrenza (tramite le goroutine
leggere e la comunicazione tramite channel
), oltre a un efficiente sistema di garbage collection integrato. Go è ideale per creare servizi di rete performanti, sistemi distribuiti, microservizi e utility da linea di comando, diventando una delle principali scelte nello sviluppo cloud native e backend moderno.
Supporto di Go in ServBay
ServBay, una soluzione integrata per lo sviluppo web locale disponibile per macOS e Windows, offre un supporto potente e senza interruzioni agli sviluppatori Go. Grazie a ServBay, puoi installare, gestire e passare tra diverse versioni di Go in modo estremamente semplice, senza dover configurare manualmente variabili d’ambiente complesse come GOROOT
o GOPATH
, semplificando notevolmente l’avvio e la manutenzione del tuo ambiente Go.
ServBay incorpora l’intera toolchain Go e supporta una vasta gamma di versioni, dalle più datate alle più recenti e stabili, per soddisfare ogni esigenza di progetto:
- Go 1.11
- Go 1.12
- Go 1.13
- Go 1.14
- Go 1.15
- Go 1.16
- Go 1.17
- Go 1.18
- Go 1.19
- Go 1.20
- Go 1.21
- Go 1.22
- Go 1.23
- Go 1.24 (più eventuali versioni incrementali aggiunte dagli aggiornamenti ServBay)
Supporto Go Modules
L’ambiente ServBay abilita e raccomanda l’uso di Go Modules per la gestione delle dipendenze. Questa soluzione, introdotta ufficialmente dalla versione 1.11 di Go, è oggi lo standard raccomandato. Dal terminale ServBay puoi utilizzare direttamente i comandi Go Modules (go mod init
, go get
, go mod tidy
, ecc.) senza preoccuparti delle classiche impostazioni di $GOPATH
.
Prerequisiti
- ServBay è installato e funzionante su macOS.
- Hai familiarità con le basi della programmazione Go.
- Sai utilizzare i comandi base da terminale.
Installazione di Go
Installare Go tramite l’interfaccia grafica (GUI) di ServBay è molto semplice:
- Avvia l’applicazione ServBay.
- Dalla barra laterale sinistra, clicca su
Pacchetti
. - Nell’elenco dei pacchetti espandi la sezione
Go
. - Clicca su
Go
per visualizzare tutte le versioni installabili. - Scegli la versione desiderata (è consigliabile usare sempre la stabile più recente, ad esempio Go 1.24) e clicca su
Installa
accanto alla versione. - ServBay scaricherà e installerà automaticamente la versione selezionata. Il tempo di installazione dipende dalla velocità della tua connessione internet.
Quando l’installazione è completata, lo stato della versione selezionata verrà indicato come “Installato”. Puoi installare altre versioni o passare da una all’altra ogni volta che necessario.
Utilizzo di Go
Una volta installato Go, puoi usare il comando go
direttamente dal terminale del sistema operativo.
Per verificare che Go sia stato installato correttamente e vedere quale versione è attiva, esegui:
bash
go version
1
Dovresti vedere un output simile che mostra la versione di Go attualmente gestita da ServBay:
go version go1.24.1 darwin/arm64
1
Compilazione ed esecuzione di una semplice applicazione web Go
Vediamo come creare un esempio di server HTTP in Go e compilarlo in ambiente ServBay.
Crea la cartella di progetto:
Si consiglia di creare una nuova directory per il progetto nella radice web predefinita di ServBay,/Applications/ServBay/www
. Ad esempio, crea la directorygo-servbay-demo
:bashcd /Applications/ServBay/www mkdir go-servbay-demo cd go-servbay-demo
1
2
3Inizializza Go Modules:
Dalla directory principale (go-servbay-demo
), inizializza i Go Modules congo mod init
. Per il percorso del modulo si consiglia di utilizzare un identificatore unico legato al progetto o al repository; qui usiamo il nome della cartella:bashgo mod init go-servbay-demo
1Il comando genera un file
go.mod
nella directory corrente che tiene traccia delle dipendenze del progetto.Scrivi il codice Go:
Crea un file sorgente chiamatomain.go
e incolla il seguente codice:gopackage main import ( "fmt" "log" "net/http" "os" ) func handler(w http.ResponseWriter, r *http.Request) { hostname, _ := os.Hostname() fmt.Fprintf(w, "Hello from Go on ServBay!\nHostname: %s\nPath: %s\n", hostname, r.URL.Path) } func main() { http.HandleFunc("/", handler) port := "8080" // Imposta la porta su cui il servizio ascolta log.Printf("Go web server avviato sulla porta %s...", port) log.Printf("Accedi da http://localhost:%s", port) // Avvia il server HTTP err := http.ListenAndServe(":"+port, nil) if err != nil { log.Fatalf("Errore in fase di avvio: %s\n", err) } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27Questo codice crea un semplice server HTTP che ascolta sulla porta locale 8080. Ogni richiesta ricevuta viene gestita con una risposta contenente "Hello from Go on ServBay!", il nome host e il percorso richiesto.
Avvia l’applicazione Go:
Assicurati di essere nel terminale ServBay, nella directory di progetto (/Applications/ServBay/www/go-servbay-demo
) e usa il comandogo run
per compilare ed eseguire il tuo programma Go:bashgo run main.go
1Se tutto è stato configurato correttamente, il terminale mostrerà qualcosa del genere, a indicare che il server web è operativo:
2024/05/20 15:00:00 Go web server avviato sulla porta 8080... 2024/05/20 15:00:00 Accedi da http://localhost:8080
1
2Accedi all’applicazione:
Apri il browser e visitahttp://localhost:8080
: dovresti vedere una risposta simile a "Hello from Go on ServBay! Hostname: your-mac-hostname Path: /".
Configurare il reverse proxy tramite ServBay (fortemente consigliato)
Sebbene tu possa accedere direttamente tramite localhost:8080
, durante lo sviluppo è preferibile usare un nome di dominio locale (ad esempio go-app.servbay.demo
) e gestire il proxy tramite il web server integrato di ServBay (Caddy, Apache oppure Nginx). Questo ti consente di accedere alla tua applicazione Go tramite una porta HTTP/HTTPS standard, replicando lo scenario di produzione e sfruttando funzionalità aggiuntive come HTTPS automatico e integrazione con altri servizi.
- Crea un sito tramite ServBay:
- Apri la GUI ServBay e vai su la sezione
Siti
. - Clicca su
Aggiungi Sito
. - Dominio: inserisci il dominio di sviluppo desiderato, ad esempio
go-app.servbay.demo
. - Tipo sito: scegli Reverse Proxy.
- Indirizzo IP: digita
127.0.0.1
. - Porta: inserisci
8080
.
- Apri la GUI ServBay e vai su la sezione
Salva e ricarica la configurazione:
Salva le modifiche alla configurazione del sito in ServBay GUI e assicurati di riavviare o ricaricare il web server (Caddy o Nginx) per rendere effettive le nuove impostazioni.Accedi tramite dominio locale:
Ora puoi aprire il browser e navigare suhttps://go-app.servbay.demo
per vedere la tua applicazione web Go. Il server web di ServBay gestisce le richieste, inoltrandole trasparentemente al tuo programma Go.
Gestione delle versioni di Go
ServBay semplifica notevolmente la gestione e la commutazione tra versioni diverse di Go.
- Passa alla versione desiderata: Dalla GUI ServBay, nella sezione
Pacchetti -> Go
, vedrai tutte le versioni installate. Dal menu a sinistra, entra inImpostazioni
e scegli quale versione di Go impostare come predefinita. - Verifica il cambiamento: Dopo la commutazione, riapri il terminale ed esegui
go version
per confermare che la versione attiva corrisponda a quella scelta.
Gestione della versione di Go per singolo progetto con .servbay.config
Oltre alla commutazione globale della versione, ServBay ti permette di specificare la versione Go per ogni progetto creando un file .servbay.config
nella directory principale.
Come funziona:
Quando nel terminale integrato di ServBay esegui cd
verso una cartella che contiene .servbay.config
, ServBay rileva e legge automaticamente il file. In base al configurazione (ad esempio tramite la riga GO_VERSION
), la sessione terminale utilizza temporaneamente la versione Go specificata.
Formato del file:
.servbay.config
è un semplice file di testo con formato chiave=valore. Per specificare la versione di Go basta aggiungere una riga come questa:
ini
# Esempio di file .servbay.config
# Questa versione di Go sarà usata nel progetto
GO_VERSION=1.22
# Puoi anche indicare le versioni di altri strumenti di sviluppo
# PHP_VERSION=8.3
# NODE_VERSION=20
# PYTHON_VERSION=3.11
# ... altre opzioni ...
# GOPROXY=https://goproxy.cn,direct
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
Vantaggi:
- Scelta automatica della versione: la versione Go viene commutata automaticamente entrando nella cartella del progetto, senza bisogno di modifiche globali.
- Isolamento tra progetti: ogni progetto viene compilato ed eseguito nell’ambiente Go previsto, evitando conflitti di versione.
- Collaborazione: versione fissa tramite
.servbay.config
facilmente condivisa su VCS (es. Git) per garantire ambienti coerenti in team.
Esempio pratico:
Supponi di avere due progetti:
project-a
richiede Go 1.12project-b
vuole Go 1.22
Puoi aggiungere un file .servbay.config
in ciascuna delle radici progetto:
/Applications/ServBay/www/project-a/.servbay.config
:iniGO_VERSION=1.12
1/Applications/ServBay/www/project-b/.servbay.config
:iniGO_VERSION=1.22
1
Dopo il comando cd /Applications/ServBay/www/project-a
nel terminale ServBay, go version
mostrerà Go 1.12.x. Se entri in /Applications/ServBay/www/project-b
e lanci lo stesso comando, vedrai Go 1.22.x.
Nota: .servbay.config
influenza principalmente la versione di Go base rilevata da ServBay nell’ambiente del terminale. Per la gestione delle dipendenze delle librerie di progetto, ti raccomandiamo comunque di usare Go Modules (go.mod
).
Domande frequenti (FAQ)
D: Ricevo “command not found” quando uso il comando
go
nel terminale ServBay. Come risolvo?R: Assicurati che il tuo terminale abbia le variabili d’ambiente PATH di ServBay impostate correttamente. Verifica anche che almeno una versione di Go sia stata installata tramite la GUI ServBay nella sezione
Pacchetti -> Go
e che sia attiva una versione predefinita.D: Come aggiorno Go all’ultima versione in ServBay?
R: Controlla regolarmente la sezione
Pacchetti -> Go
di ServBay. Quando ServBay aggiunge una nuova versione, la troverai nella lista. Basta un clic per installarla e impostarla come predefinita dalla GUI.D: Riscontro lentezza o problemi di rete con Go Modules?
R: Go Modules scarica le dipendenze tramite
proxy.golang.org
di default. Se lavori da aree con restrizioni di rete (Cina, ecc.), puoi configurare la variabile GOPROXY per usare un mirror più veloce comehttps://goproxy.cn
ohttps://goproxy.io
. Puoi indicare il mirror sia nelle impostazioni globali di ServBay che nel file.servbay.config
(es.GOPROXY=https://goproxy.cn,direct
).D: Il mio server web Go mostra “address already in use” durante l’avvio. Come risolvo?
R: Questo errore indica che la porta scelta (ad esempio 8080) è già usata da un altro processo. Puoi:
- Cambiare il codice Go e usare una porta libera (es. 8081, 9000 ecc.);
- Individuare e chiudere il processo che occupa la porta. Su macOS, usa il comando
lsof -i :<port_number>
(ad esempiolsof -i :8080
) per individuare il PID, quindi termina il processo conkill <PID>
.
D: Meglio usare
.servbay.config
oppure la commutazione globale della versione Go?R: La commutazione globale tramite la GUI cambia la versione Go predefinita di tutto il sistema. Il file
.servbay.config
invece applica la versione solo alla sessione terminale e solo nel progetto corrente. Si consiglia di usare.servbay.config
per la gestione delle versioni per progetto, perché garantisce ambienti dedicati e replicabili, specialmente se lavori con progetti multipli che richiedono versioni diverse. La commutazione globale è comoda se usi spesso una sola versione Go.
Conclusione
ServBay offre agli sviluppatori Go su macOS un ambiente locale eccezionalmente efficiente e facile da usare. Grazie alla sua interfaccia grafica intuitiva puoi installare e gestire diverse versioni di Go, e con .servbay.config
controllare la versione per ogni progetto. L’integrazione con Go Modules e i web server incorporati consente di gestire facilmente le dipendenze e simulare ambienti di produzione tramite reverse proxy. ServBay riduce al minimo la complessità di configurazione, permettendoti di concentrarti su scrittura e innovazione del tuo codice Go.