В самом деле, почему при печати отображаются отраженное значение и его интерфейс?
Выдержка из законов отражения:
(Почему не 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 неявно, а вместо этого печатает конкретные значения, которые они содержат.