Почему none не равно none в Golang

«Почему none не равно none в Golang» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Go nil (а не none) может не равняться nil в некоторых случаях из-за различий в типах. nil в Go — это нулевое значение для указателей, интерфейсов, слайсов, каналов, мап и функций.

Пример:

var a *int      // nil pointer
var b interface{} = a  // интерфейс с типом *int и значением nil
fmt.Println(b == nil)  // false, т.к. интерфейс содержит тип *int

Здесь b != nil, потому что интерфейс хранит информацию о типе (*int), даже если его значение nil. Для корректной проверки можно использовать reflect.ValueOf(b).IsNil() или явно приводить к нужному типу.