В Go новички часто сталкиваются с проблемой интерфейсных переменных, которым присваивае
тся
nil указатель. В таком случае, хотя значение в интерфейсе является
nil, сама переменная интерфейса не равна
nil.Пример: создаем перемен
н
ую x как указатель на
int, который по умолчанию
nil, и переменн
ую y как пустой интерфейс, который тоже
nil по умолчанию. После присваиван
ия x переменн
ой y, интерфе
йс y уже не является
nil, хо
тя x все еще
nil.
var x *int
var y any
y = x
📌 Что верне
т y == n
il? Верне
т fal
se. Это потому, что интерфейс не просто представляет значение, которое ему присвоено, а действует как контейнер для этого значения.Для проверки, является ли значение в интерфейс
е n
il, нужно использовать утверждение типа. Например, для проверки
y на n
il, используем:
y.(*int) == nil
Это показывает, что интерфейс
y
не nil
, но содержащееся в нем значение — nil
. Полный пример здесь.#tip