Variabili

Le variabili sono dichiarate esplicitamente con la parola chiave var indicandone a seguire il nome poi il tipo.
Per esempio:

(030variables.go):

package main

import "fmt"

func main() {

	// Dichiarazione di variabile
	// Il tipo è dopo il nome
	var a string = "initial"
	fmt.Println(a)

	// Dichiarazione e assegnazione di più variabili
	var b, c int = 1, 2
	fmt.Println(b, c)

	// Il tipo è dedotto dal valore assegnato
	var d = true
	fmt.Println(d)

	// In asssenza di assegnazione la variabile
	// vale lo zero del suo tipo
	var e int
	fmt.Println(e)

	// Abbreviazione di dichiarazione e assegnazione
	f := "short"
	fmt.Println(f)
}

Le variabili possono essere inizializzate all'istante della dichiarazione, assegnandovi
un valore con l'operatore =.

Le variabili non inizializzate hanno come valore lo zero del loro tipo, i.e. 0, 0.0, "", false.

Si possono dichiarare più varibili in una sola dichiarazione, ed anche inizializzarle nell'ordine rispettivo.

Se vi è un'inizializzazione immediata, in molti casi Go può dedurre il tipo della variabile dal tipo della costante che le viene assegnata.

La parola var può essere omessa se vi è un'inizializzazione immediata ad un tipo noto e si usa l'operatore :=, di dichiarazione e inizializzazione. P.es.:

x := 5
saluto := "Ciao"
raggio := 3.89
condizione := true

è come:

var x int = 5
var saluto string = "Ciao"
var raggio float64 = 3.09
var condizione bool = true

Si può usare l'assegnazione e dichiarazione combinata := solo la prima volta. Tutte le volte seguenti è solo un'assegnazione con =.

Per esempio il seguente codice è errato:

x := 3
.......
x := 5

Doveva essere:

x := 3
.......
x = 5

Una stringa è immutabile. Deve essere inizializzata al momento della dichiarazione e non può più essere assegnata. Non si può solo dichiarare una stringa come in:

string saluto
...
saluto = "Ciao"

Tipi delle Variabili

I tipi come al solito determinano lo storaggio in memoria e la rappresentazione.

TipoStoraggio
uint88-bit integers (0 to 255)
uint1616-bit integers (0 to 65535)
uint3232-bit integers (0 to 4294967295)
uint6464-bit integers (0 to 18446744073709551615)
int8signed 8-bit integers (-128 to 127)
int16signed 16-bit integers (-32768 to 32767)
int32signed 32-bit integers (-2147483648 to 2147483647)
int64signed 64-bit integers (-9223372036854775808 to 9223372036854775807)
float32IEEE-754 32-bit floating-point numbers
float64IEEE-754 64-bit floating-point numbers
complex64complex numbers with float32 real and imaginary parts
complex128complex numbers with float64 real and imaginary parts
bytealias for uint8
runealias for int32
boolcome uint8 (true oppure false)
stringallocazione a seconda della lunghezza della costante stringa assegnata