Tra gli ultimi articoli

I puntatori in Go

golangCos’è un puntatore? Possiamo considerare un puntatore come un link all’indirizzo di memoria di una variabile. In questo modo potremmo leggere o modificare questa variabile in qualsiasi scope ci troviamo. Impossibile farne a meno in progetti più o meno complessi.

Nella prima funzione la funzione richiamata dal main non riesce a cambiare definitivamente il valore della variabile. Per questo nella seconda andaiamo ad utilizzare il puntatore, applicando davanti all variabile da modificare & otteniamo l’aerea di memoria dove il valore di questa variabile è allocata. Applicando poi * davanti al nome del puntatore otteniamo il valore della variabile mentre senza ottiamo proprio l’indirizzo della memoria.

 

 


package main
import "fmt"
func testPunt(xvaloreVar int) {
xvaloreVar = xvaloreVar + 1000
fmt.Println(xvaloreVar)
}
func main() {
xvaloreVar := 1000
testPunt(xvaloreVar)
fmt.Println(xvaloreVar)
}

Risultato in console:

2000
1000

Seconda funziona con i puntatori


package main
import "fmt"
func testPunt(getPunt *int) { //la funzione prende come parametro l'argomento getPunt che è l'indirizzo della memoria notare che il valore int in questo caso diventa * dato che si riferisce al puntatore
*getPunt = 100 //assegna al puntatore il nuovo valore della variabile
fmt.Println(*getPunt) //stampa in console il valore del puntatore
}
func main() {
xvaloreVar := 1000
testPunt(&xvaloreVar) //invia alla funzione come argomento l'indirizzo dove è memorizzato il valore della variabile xvaloreVar
fmt.Println(xvaloreVar)
}

Risultato in console
100
100

Ovviamente vale sia per le funzioni nel package main che in tutti gli altri package

 

About Stefano Berardi

Stefano Berardi
''non sono superman... I'm not superman..."