Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: golang, nil, pointer, receiver

Как работает nil в Go и что будет при вызове метода на nil-ресивере?

Проверяет понимание механики nil

Короткий ответ

В Go можно вызывать методы на nil-указателях, если метод не обращается к данным объекта. Если же происходит доступ к полям или вызов других методов, будет panic.

Длинный ответ

В Go nil — это нулевое значение для ссылочных типов, включая указатели, карты, срезы, каналы, интерфейсы и функции. В отличие от многих языков, Go допускает вызов методов на nil-указателях, если реализация метода не требует обращения к памяти, на которую должен указывать этот указатель. Это часто используется для упрощения API, когда метод может обрабатывать как полноценный объект, так и пустое состояние. Однако если внутри метода произойдёт обращение к полям структуры через nil-указатель, программа завершится panic. Например, метод с ресивером func (p *Person) Greet() может работать с nil, если проверит if p == nil и вернёт сразу, но при попытке сделать p.Name на nil будет ошибка. Такое поведение полезно, например, для безопасных no-op методов в логгерах или обработчиках событий. Стоит помнить, что у nil-значений интерфейсов и nil-указателей на структуры есть важное различие: интерфейс, содержащий nil-указатель, не является полностью nil, и это может влиять на проверки if x == nil.

Пример:

type Person struct{ Name string }

func (p *Person) Greet() {
    if p == nil {
        fmt.Println("No person")
        return
    }
    fmt.Println("Hello,", p.Name)
}

func main() {
    var p *Person
    p.Greet() // No person
}

Вывод: Нужно проектировать методы так, чтобы они безопасно работали с nil, если это ожидаемое поведение.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • Golang

    Golang

Ключевые слова

#golang

#nil

#pointer

#receiver

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.