К вопросам

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

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

Тест

Вопрос 3

Какой вывод дадут два вызова `fmt.Println` (две строки в stdout)?

Go
package main

import (
	"fmt"
	"reflect"
)

func main() {
	var i any
	fmt.Println(reflect.ValueOf(i).IsValid())

	var p *int
	i = p
	fmt.Println(i == nil, reflect.ValueOf(i).IsNil())
}
Варианты ответа

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

Для нулевого интерфейса `var i any` значение `reflect.ValueOf(i)` невалидно — `IsValid()` даёт `false` (не `true`). После присваивания `i = (*int)(nil)` сравнение `i == nil` ложно, а `ValueOf(i)` описывает нулевой указатель и `IsNil()` истинно.