Come in ogni linguaggio di programmazione anche in Go le informazioni vengono gestite mediante variabili. Parliamo di posizioni di memoria in cui i dati vengono temporaneamente depositati in attesa di
essere trattati. Una variabile va dichiarata e per farlo si utilizza la parola chiave var
:
var nome string = "Giovanni"
In questa riga di codice abbiamo provveduto a dichiarare la variabile nome e ad assegnarle il tipo di dato stringa (sequenza alfanumerica). Con l'operatore uguale (=) abbiamo inoltre
provveduto ad inizializzarla assegnandole da subito il valore "Giovanni".
Tale è la struttura completa di una dichiarazione di variabile ma a questa spesso si può ovviare in alcuni modi. In primis, si può rinunciare all'indicazione esplicita del tipo di
dato. Assegnando direttamente un valore, Go sarà in grado per inferenza di attribuire il corretto tipo di informazione. Inoltre si può ricorrere ad una forma abbreviata di dichiarazione
che evita la parola chiave var
utilizzando l'operatore :=
per l'inizializzazione. Pertanto, la dichiarazione:
nome := "Giovanni"
sarebbe stata un perfetto sostituto della precedente.
Tipi di dato
Abbiamo accennato alla presenza di tipi di dato in Go quindi è il momento di vederne in dettaglio una panoramica. I principali tipi di informazione da gestire sono: valori booleani,
stringhe e numeri con e senza virgola.
Le stringhe con il tipo string
indicano variabili atte ad ospitare sequenze di caratteri alfanumerici. Da ricordare che le stringhe sono oggetti
immutabili
I booleani, tipo bool
, possono rappresentare solo le costanti true
e false
che indicano, rispettivamente, il vero logico ed il falso
logico. È un tipo di dato indispensabile al controllo del flusso di esecuzione. Per i numeri, è necessario fare qualche distinzione in più.
Gli interi si usano per indicare numeri senza virgola e possono essere di varia tipologia a seconda del range accettabile e della presenza o meno
del segno. Quelli senza segno non contemplano i valori negativi ma hanno un'estensione doppia nel campo positivo rispetto a quelli con segno:
uint8
: intero senza segno di un byte. Copre il range da 0 a 255;uint16
: intero senza segno di due byte per valori da 0 a 65.535;uint32
: intero senza segno di quattro byte, raggiunge 4.294.967.295;uint64
: intero senza segno di otto byte che può superare 18 X 1018;
Gli interi con segno permettono di indicare valori negativi ma avranno un'estensione dimezzata in territorio positivo:
int8
: ha dimensione di un byte. Copre il range da -128 a 127;int16
: si estende per due byte per valori da -32.768 a 32.767;int32
: intero di quattro byte, va da -2.147.483.648 a 2.147.483.647;int64
: composto da otto byte che va da circa -9 X 1018 a circa 9 X 1018.Per tipi numerici diversi dagli interi, si può ricorrere a float32
e float64
(numeri con la virgola) oppure a complex64
e complex128
per i numeri complessi dotati di parte immaginaria.
Utilizzo di costanti
Oltre alle variabili possiamo dichiarare costanti ovvero valori che una volta inizializzati non possono essere più modificati, si usa per questo la parola chiave const
:
const valore = 5
Dopo la sua inizializzazione valore non potrà più essere oggetto di riassegnazione.
Operatori aritmetici e di assegnazione
Nel corso di questa lezione abbiamo già incontrato un primo operatore, l'uguale, il principale elemento per l'assegnazione di valori. In Go tuttavia esistono tutte le tradizionali tipologie di operatori.
Tra quelli aritmetici troviamo i classici simboli presenti in ogni linguaggio: + (somma), - (sottrazione), * (moltiplicazione), / (divisione), % (resto della divisione), ++ (incremento unario) e
-- (decremento unario). Tali operatori possono essere coniugati con l'uguale per formare operatori misti: += (somma e assegnazione), -= (sottrazione e assegnazione),
*= (moltiplicazione e assegnazione), /= (divisione e assegnazione) e %= (resto della divisione e assegnazione).
Ad esempio, utilizzare a+=2
equivarrà a sommare il numero 2 alla variabile a
e a riassegnare constestualmente a quest'ultima il risultato: come se facessimo a=a+2
.
Chiudiamo la lezione con un esempio che metta in moto quanto appreso:
package main
import "fmt"
func main(){
var totale float32 =0
totale+=15
totale+=20
totale+=12
const aliquota_IVA=22.0
totale *= 1+aliquota_IVA/100
fmt.Println("Totale IVA inclusa pari a ", totale)
}
Abbiamo immaginato di calcolare un totale di tre prezzi al quale poi è stata aggiunta l'aliquota IVA per avere un importo finale. Eseguendo il codice da riga di comando con go run
otterremo
la stampa della stringa "Totale IVA inclusa pari a 57.34".
Esistono anche altri operatori in Go ma li incontreremo nelle prossime lezioni, al momento in cui dovremo impiegarli.