В самом деле, почему при печати отображаются отраженное значение и его интерфейс? - PullRequest
0 голосов
/ 24 сентября 2018

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

(Почему бы не 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)

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

значение x равно: 3,4

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

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

1 Ответ

0 голосов
/ 24 сентября 2018

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

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

...