Puntatori di Golang

Puntatori di Golang
Un puntatore nella programmazione si riferisce alla variabile utilizzata per archiviare l'indirizzo di memoria di un'altra variabile nel sistema. L'indirizzo di memoria della variabile è espresso in formato esadecimale a partire da 0x.

I puntatori sono utili in quanto ci consentono di archiviare la memoria di un indirizzo in cui sono archiviati i dati detenuti da una variabile. Usando i puntatori, determiniamo il valore memorizzato dalla variabile a quell'indirizzo di memoria.

In questo articolo per principianti, discuteremo di come iniziare con i puntatori nel linguaggio di programmazione Go.

Golang dichiara variabile

Dichiariamo un puntatore uguale a quello che dichiariamo una variabile normale. Tuttavia, utilizziamo l'operatore di dereferencing per mostrare che la variabile contiene un puntatore.

Prima di dichiarare una variabile, ci sono due operatori che dobbiamo conoscere:

  1. * - L'asterisco nella dichiarazione del puntatore è noto come operatore di dereferencing. Viene utilizzato per dichiarare un valore del puntatore e accedere al valore memorizzato a un indirizzo di memoria specifico.
  2. & - In puntatore, l'operatore dell'indirizzo viene utilizzato per accedere all'indirizzo di memoria di una variabile. Può anche restituire l'indirizzo della variabile.

La sintassi seguente mostra come dichiarare una variabile puntatore:

var pointer_name *data_type

Ad esempio, il codice seguente dichiara una variabile puntatore "PTR" che contiene l'indirizzo dei tipi INT.

var ptr *int

Golang Initialize Pointer

Possiamo inizializzare un puntatore allocando l'indirizzo di memoria di una variabile usando l'operatore dell'indirizzo, mostrato sopra.

Un esempio è come mostrato:

Pacchetto principale
Importa "FMT"
func main ()
// Dichiara variabile
x: = 100
// Dichiara e inizializza il puntatore
var ptr *int = & x
// Indirizzo di stampa
fmt.Println (PTR)

Nell'esempio sopra, iniziamo dichiarando una variabile con un valore intero. Creiamo quindi un puntatore con in mano l'indirizzo di memoria della variabile.

Una volta che abbiamo stampato l'indirizzo, dovremmo ottenere un output di esempio come mostrato:

$ go run puntain.andare
0xc000018098

Possiamo anche dichiarare una variabile e impostare il valore più avanti nel codice. Un esempio è come mostrato:

Pacchetto principale
Importa "FMT"
func main ()
// Dichiara variabile
x: = 100
// dichiara
var ptr *int
ptr = & x
// Indirizzo di stampa
fmt.Println (PTR)

Qui, dichiariamo il puntatore e successivamente impostiamo il suo valore utilizzando l'operatore dell'indirizzo.

Puntatore di Golang Nil

Se si dichiara un puntatore e non si assegna un valore, il puntatore contiene un valore zero. Per esempio:

Pacchetto principale
Importa "FMT"
func main ()
var ptr *int
fmt.Println (PTR)

Il codice sopra restituisce zero.

Tipo di puntatore

Nel nostro esempio, abbiamo dichiarato il tipo di punta. Ciò significa che il puntatore può contenere solo la memoria indirizzata al tipo di dati specificato.

Se si tenta di memorizzare l'indirizzo di un altro tipo, il compilatore restituisce un errore come mostrato nell'esempio seguente:

Pacchetto principale
Importa "FMT"
func main ()
// Dichiara variabile
str: = "ciao"
var ptr *int
PTR = & STR
// Indirizzo di stampa
fmt.Println (PTR)

Nell'esempio sopra, dichiariamo una variabile con il tipo int. Tuttavia, assegniamo un indirizzo di un tipo di stringa.

Il compilatore restituisce un errore come:

.\ puntatore.GO: 11: 6: Impossibile usare e STR (tipo *String) come tipo *int in Assegnazione

Per evitare questo, puoi usare il metodo letterale di Dichiarazione del puntatore. Ad esempio, possiamo fare:

Pacchetto principale
Importa "FMT"
func main ()
str: = "ciao"
PTR: = & STR
fmt.Println (PTR)

L'esempio sopra consente al compilatore di determinare il tipo di indirizzo da contenere nel puntatore specificato.

Dereferenza del puntatore Golang

Per accedere al valore memorizzato a un indirizzo specifico, possiamo utilizzare l'operatore di dereferencing. Un codice di esempio è come mostrato:

Pacchetto principale
Importa "FMT"
func main ()
x: = 100
PTR: = & x
fmt.Println ("x:", x)
fmt.Println ("indirizzo:", ptr)
fmt.Println ("Valore all'indirizzo:", *PTR)

Il codice sopra utilizza l'operatore di dereferencing per ottenere il valore memorizzato all'indirizzo detenuto dal puntatore "PTR"

L'output risultante è come:

X: 100
Indirizzo: 0xc000018098
Valore all'indirizzo: 100

Conclusione

Questa guida ti guida attraverso le basi del lavoro con i puntatori in Go. Usando i puntatori, è possibile accedere e archiviare l'indirizzo di memoria di una variabile. È inoltre possibile utilizzare il puntatore per accedere alla variabile memorizzata a un indirizzo di memoria specifico.

Grazie per aver letto!