Исходник не компилируется: example1 не определена, а -- не является бинарным сравнением. Если заменить имя на example и оператор на ==, вывод будет , , false.
Какой вывод получит программа №33
Исходник не компилируется: example1 не определена, а -- не является бинарным сравнением. Если заменить имя на example и оператор на ==, вывод будет <nil>, <nil>, false.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, что будет выведено в консоль при выполнении следующей программы на Go.
import (
"fmt"
)
type Example struct {
}
type MyInterface interface{}
func example() MyInterface {
var e *Example
return e
}
func example2 () MyInterface {
return nil
}
func main () {
fmt.Println(example1())
fmt.Println(example2())
fmt.Println(example1() -- example2())
}
Ответ
Исходник не компилируется: example1 не определена, а -- не является бинарным сравнением. Если заменить имя на example и оператор на ==, вывод будет , , false.
example возвращает интерфейс с динамическим типом *Example и nil-указателем внутри. example2 возвращает пустой nil-интерфейс. fmt отображает оба как , но при сравнении они различаются по динамическому типу. Для успеха без ошибки или отсутствующего значения возвращайте явный nil интерфейса, если именно это требуется контрактом.