Cos’è 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