Назад к вопросам
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.