При печати структуры с вложенной структурой, в которой реализован String (), формат %v
выводит «неожиданное» значение для нашего понимания.
Ниже приведен фрагмент кода.
package main
import (
"fmt"
)
type Inner struct {
}
type A struct {
Inner
FieldA string
}
func (i Inner) String() string {
return "anything"
}
func main() {
myA := A{FieldA: "A"}
fmt.Printf("%v", myA)
}
Мы ожидаем, что результат будет
{что-нибудь A}
Но фактический результат -
ничего
Почему этот результат? Кажется FieldA
игнорируется? Чтобы сделать это еще более запутанным, если у нас есть две вложенные структуры, в которых реализована функция String (), то на выходе ожидается.
package main
import (
"fmt"
)
type Inner struct {
}
type InnerAgain struct {
}
type A struct {
Inner
InnerAgain
FieldA string
}
func (i Inner) String() string {
return "anything"
}
func (i InnerAgain) String() string {
return "nothing"
}
func main() {
myA := A{FieldA: "A"}
fmt.Printf("%v", myA)
}
Выход
{что-нибудь, ничего A}
...