🟡 Средний · 2 очк. Разное / продвинутое
Что произойдет при вызове метода с pointer receiver на nil-указателе?
A Паника при любом вызове
B Метод вызовется; паника произойдет только при обращении к полям через nil-указатель внутри метода
C Ошибка компиляции
D Метод не вызовется, вернет zero value
Объяснение вопроса

В Go вызов метода с pointer receiver на nil - валидная операция. Метод получает nil как значение receiver:

type List struct {
    head *Node
}

func (l *List) Len() int {
    if l == nil {
        return 0  // корректная обработка nil
    }
    return l.count()
}

var l *List // nil
fmt.Println(l.Len()) // 0, не паника!

// Но если метод обращается к полям без проверки:
func (l *List) Head() *Node {
    return l.head // ПАНИКА: nil pointer dereference
}

Это используется в стандартной библиотеке: например, (*bytes.Buffer)(nil).Len() возвращает 0. Полезно для цепочек вызовов и optional-объектов.

Правило: если метод может быть вызван на nil receiver, добавьте проверку if x == nil в начале.

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.