К вопросам

Рефлексия и интерфейсы

Тест · Вопрос 2 из 4

Тест

Вопрос 2

Четыре вызова `checkError` печатают результат `err == nil`. Какая последовательность из четырёх `true`/`false`?

Go
package main

import "fmt"

type Err struct{}

func (e *Err) Error() string { return "test error" }

func checkError(err error) {
	fmt.Println(err == nil)
}

func main() {
	var err1 error
	checkError(err1)

	var err2 *Err
	checkError(err2)

	err3 := &Err{}
	checkError(err3)

	err3 = nil
	checkError(err3)
}
Варианты ответа

Выберите один ответ

`err1` — пустой интерфейс `error` → внутри `checkError` это `nil`. У `err2` динамический тип `*Err` с нулевым значением указателя — интерфейс не равен `nil`. После `&Err{}` значение ненулевое. После присваивания `err3 = nil` переменная имеет тип `*Err`, поэтому переданный в функцию интерфейс снова с «типизированным nil», не пустым интерфейсом — сравнение с `nil` снова ложно.