Почему nil interface не равен nil pointer?

Middle+
290 просмотров
AFK Offer AI

Интерфейс в Go — пара (type, value). nil interface — когда оба nil: (nil, nil). nil pointer в интерфейсе — когда тип установлен: (*MyType, nil). Сравнение == nil проверяет обе части. (*MyType, nil) != nil, потому что type часть не nil. Это by design — интерфейс знает тип даже когда значение nil, и может вызывать методы на nil receiver. Практический совет: никогда не присваивай типизированный nil в интерфейс, если собираешься потом сравнивать с nil. Возвращай просто nil.

Следующий вопрос

Как найти goroutine leak?