Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goSpMtNR 12 of 280 menu
◀ ▶

Пустой получатель в Go

Метод указателя можно вызвать даже тогда, когда указатель пустой, если сам метод это проверяет. Значение nil в переменной типа *User не мешает входу в метод, пока код не обращается к полям без проверки.

Сделаем печать имени с заглушкой для пустого получателя:

import "fmt" type User struct { Name string Age int } func (u *User) ShowName() { if u == nil { fmt.Println("unknown") return } fmt.Println(u.Name) }

Создадим пустой указатель и вызовем метод:

var u *User u.ShowName()

На экране "unknown". Программа не остановилась: метод увидел пустой указатель и вышел через return до чтения Name. Без такой проверки обращение к полю при nil привело бы к ошибке выполнения.

Тот же метод сработает и у обычного значения, если указатель на него не пустой. Проверка u == nil остается первым шагом, когда метод должен терпимо вести себя при отсутствии данных.

Дана структура:

package main import "fmt" type User struct { Name string Age int } var u *User

Добавьте метод указателя, который при пустом получателе печатает "empty", иначе имя. Вызовите его у u.

Даны переменные:

package main import "fmt" type Note struct { Text string } var a *Note b := &Note{Text: "hi"}

Запишите метод указателя с проверкой на nil и выведите результат для a и b.

Что произойдет при вызове метода указателя без проверки, если внутри сразу читают поле структуры?

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить