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.
| Tipo | Storaggio |
|---|---|
uint8 | 8-bit integers (0 to 255) |
uint16 | 16-bit integers (0 to 65535) |
uint32 | 32-bit integers (0 to 4294967295) |
uint64 | 64-bit integers (0 to 18446744073709551615) |
int8 | signed 8-bit integers (-128 to 127) |
int16 | signed 16-bit integers (-32768 to 32767) |
int32 | signed 32-bit integers (-2147483648 to 2147483647) |
int64 | signed 64-bit integers (-9223372036854775808 to 9223372036854775807) |
float32 | IEEE-754 32-bit floating-point numbers |
float64 | IEEE-754 64-bit floating-point numbers |
complex64 | complex numbers with float32 real and imaginary parts |
complex128 | complex numbers with float64 real and imaginary parts |
byte | alias for uint8 |
rune | alias for int32 |
bool | come uint8 (true oppure false) |
string | allocazione a seconda della lunghezza della costante stringa assegnata |