Sobes.tech
Назад к вопросам
Junior — Middle
77

Чем отличается выражение пустого интерфейса от значения nil в языке Go?

Компании, где спрашивали
Самокат Тех

Ответ от нейросети

sobes.tech AI

В языке Go пустой интерфейс (interface{}) — это тип, который может содержать значение любого типа, включая nil. Однако выражение пустого интерфейса и значение nil — это разные вещи.

  • var x interface{} — переменная x типа пустого интерфейса, которая по умолчанию равна nil, то есть не содержит ни тип, ни значение.
  • Но если присвоить x какое-то значение, например x = 5, то x уже не nil, так как содержит тип int и значение 5.

Отличие в том, что интерфейс в Go представлен внутренне двумя указателями: на тип и на значение. Интерфейс равен nil только если оба указателя равны nil.

Пример:

var i interface{} // i == nil
var p *int = nil

i = p // i != nil, так как тип *int присутствует, хотя значение nil

fmt.Println(i == nil) // false

Таким образом, пустой интерфейс может содержать значение nil конкретного типа, но сам интерфейс при этом не будет равен nil. Это важный момент при проверках на nil в Go.