В самом деле, почему при печати отображаются отраженное значение и его интерфейс?

Выдержка из законов отражения:

(Почему не fmt.Println(v)? Потому что v является отражением. Значение; нам нужно конкретное значение, которое оно содержит.)

Это смущает меня, потому что следующий код:

var x float64 = 3.4
var v = reflect.ValueOf(x)

fmt.Println("value of x is:", v)
y := v.Interface().(float64) // y will have type float64.
fmt.Println("interface of value of x is:", y)

Печатает тот же вывод:

значение х составляет: 3,4

Интерфейс значения х: 3.4

Это потому что fmt внутренне находит конкретное значение для отраженного v?

1 ответ

Решение

Это особый случай, который задокументирован на String() метод reflect.Value, Говорится

Пакет fmt обрабатывает значения специально. Он не вызывает их метод String неявно, а вместо этого печатает конкретные значения, которые они содержат.

Другие вопросы по тегам