Struct e interfacce

Go Pointers: & and *

Share a value instead of copying it, so a function can change the original.

  • Intermedio
  • 4 min di lettura
  • 1 esempio eseguibile
Cosa imparerai
  • & takes an address
  • * follows a pointer
  • nil pointers
Passing 21 to a function
double(number)
  • gets a copy
  • number stays 21
doubleInPlace(&number)
  • gets the address
  • number becomes 42

An address instead of a copy

Go copies values when it passes them to a function. A pointer holds the address of a value, so a function that receives a pointer can change the original.

double changes only its own copy, so number stays 21. &number gives the address, and *value reads or changes what is stored there. Go follows a pointer to a struct for you, so counter.Count works. A pointer that points to nothing is nil.

Punti chiave

  1. Go copies arguments by default.
  2. &number is the address of number.
  3. *pointer reads or changes the value there.

Esempio Go eseguibile

Go
Esegui il codice →
main.go
package main

import "fmt"

func double(value int) {
	value *= 2 // changes only the copy
}

func doubleInPlace(value *int) {
	*value *= 2 // changes the original through the pointer
}

type Counter struct{ Count int }

func main() {
	number := 21
	double(number)
	fmt.Println(number)

	doubleInPlace(&number)
	fmt.Println(number)

	pointer := &number
	*pointer = 7
	fmt.Println(number, *pointer, pointer == &number)

	counter := &Counter{}
	counter.Count++ // Go follows the pointer for you
	fmt.Println(counter.Count)

	var missing *Counter
	fmt.Println(missing == nil)
}
Crea un pulsante Run per questo esempio Risultato dell'esecuzione
21
42
7 7 true
1
true

Esercitati

Apri l'esempio nel compilatore online, cambia un valore o aggiungi una riga e prova a prevedere l'output prima di eseguirlo. Poi rompi il codice di proposito e leggi il messaggio del compilatore.

Hai finito questa lezione?

Segnala come imparata per tenere traccia dei tuoi progressi.

Prossima: Interfaces →

Esercitati con una sfida

Usa ciò che questa lezione spiega per risolvere un problema reale. Ogni sfida gira nel browser, con test immediati e una revisione dell'IA.

Tutte le sfide