Структуры и интерфейсы

Go Pointers: & and *

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

  • Средний
  • Чтение: 4 мин
  • Примеров для запуска: 1
Что вы узнаете
  • & 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.

Главное

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

Пример на Go, который можно запустить

Go
Запустить код →
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)
}
Получить кнопку запуска для этого примера Результат выполнения
21
42
7 7 true
1
true

Практика

Откройте пример в онлайн-компиляторе, измените значение или добавьте строку и попробуйте предсказать вывод до запуска. Затем намеренно сломайте код и прочитайте сообщение компилятора.

Закончили этот урок?

Отметьте его как изученный, чтобы следить за прогрессом.

Далее: Interfaces →

Попрактикуйтесь на задаче

Примените материал этого урока к реальной задаче. Каждая задача запускается в браузере, с мгновенными тестами и разбором от ИИ.

Все задачи