Structs e interfaces

Go Pointers: & and *

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

  • Intermedio
  • 4 min de lectura
  • 1 ejemplo ejecutable
Lo que aprenderás
  • & 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.

Puntos clave

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

Ejemplo ejecutable de Go

Go
Ejecutar código →
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)
}
Obtén un botón Run para este ejemplo Resultado de ejecutar el código
21
42
7 7 true
1
true

Practica

Abre el ejemplo en el compilador online, cambia un valor o añade una línea y predice la salida antes de ejecutarlo. Después rompe el código a propósito y lee el mensaje del compilador.

¿Terminaste esta lección?

Márcala como aprendida para seguir tu progreso.

Siguiente: Interfaces →

Practica con un reto

Usa lo que cubre esta lección para resolver un problema real. Cada reto se ejecuta en el navegador, con pruebas al instante y una revisión de IA.

Todos los retos