Struttura di un Applicativo

Go ha il concetto di workspace che è la directory di testa dell'albero di sviluppo applicativi.

Il workspace ha tre directory principali:

  • src - sorgenti di tutti i progetti Go
  • bin - esguibili compilati dai sorgenti: sono linkati staticamente
  • pkg - packages compilati e installati: sono librerie statiche linkate agli eseguibili

bin contiene gli eseguibili che sono stati installati.
Il fatto che gli eseguibili siano statici e non abbiano bisogno di librerie dinamiche o di un ambiente runtime li rende estremamente portatili, anche se di dimensione notevole.

src, quando è organizzato bene, è composto di alberi di sottodirectories, a profonditàvariabile ma non eccessiva, con la Struttura informale repository/autore/artefatto.
E' la stessa struttura che viene usata, per esempio, da GitHub.

  • repository è lo URL (solo sito web, senza protocollo, porta, ecc.) che indica il repository remote di appoggio del progetto
  • autore è l'identificativo univoco del singolo o del gruppo responsabile per la creazione di uno o più progetti
  • artefatto è la directory contenente i sorgenti del programma col main o del package che è il progetto singolo di un autore o gruppo

pkg contiene i package dopo la loro installazione, in sottodirectories che hanno la stessa struttura dei corrispondenti sorgenti, repository/autore/artefatto.
Quando un programma importa un package deve usare

import repository/autore/artefatto

e riferirsi internamente alle funzioni o simboli esportati dal package con artefatto.Funzione() o artefatto.Simbolo.

Variabili d'ambiente

Per sviluppare in Go occorre settare alcune variabili d'ambiente:

  • GOPATH deve puntare al workspace
  • GOBIN deve puntare alla sottodirectory bin del workspace
  • GOROOT deve puntare alla directory di sistema dove è stato installato Go

E' anche opportuno modificare la variabile d'ambiente PATH di sistema:

export PATH=$GOBIN:$PATH

Si possono avere più workspace, modificando di volta in volta le variabili d'ambiente sopra. Ma durante la compilazione il riferimanto a packages avviene solo nel GOPATH corrente. (Una volta compilati gli eseguibili possono essere messi ovunque, dato che sono statici)

Per iniziare

Supponiamo di aver installato Go in /opt/go e di volere un workspace sotto la directory di login, sottodirectory go:

cd
mkdir -p go/src
mkdir -p go/bin

La directory go/pkg verrà automaticamente creata la prima volta che installiamo un package.

Ora modifichiamo il .profile aggiungendo alla fine:

export GOROOT=/opt/go
export GOPATH=$HOME/go
export GOBIN=$GOPATH/bin
export PATH=$GOBIN:$PATH

Per essere sicuri che queste variabili d'ambiente siano riconosciute da tutti i programmi e utilities di sistema, è necessario un relogin.