Фрагмент не компилируется: тип string пишется без кавычек, а строку нельзя сравнивать с nil. После i = s интерфейс i уже не равен nil.
Какой результат выведет консоль в примере №3
Фрагмент не компилируется: тип string пишется без кавычек, а строку нельзя сравнивать с nil. После i = s интерфейс i уже не равен nil.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, что напечатает программа при её запуске, и объясните причину.
var s "string"
fmt.Println(s == nil)
var i interface{}
fmt.Println(i == nil)
i = s
fmt.Println(i==nil)
Ответ
Фрагмент не компилируется: тип string пишется без кавычек, а строку нельзя сравнивать с nil. После i = s интерфейс i уже не равен nil.
Корректная последовательность может выглядеть так: var s string; fmt.Println(s == ""), затем var i interface{}; fmt.Println(i == nil), затем i = s; fmt.Println(i == nil).
Она выведет true, true, false. Нулевое значение строки — пустая строка, не nil. После присваивания s интерфейс содержит тип string и пустое значение; равенство nil требует отсутствия динамического типа и значения.