package main
import (
"fmt"
)
type bar struct {
}
func (b bar) String() string {
return "bar"
}
type foo struct {
b []*bar
bb *bar
}
func main() {
f := foo{b: []*bar{&bar{}}, bb:&bar{}}
fmt.Println(f, f.b, f.bb)
}
为什么结果是
{[0x176f44] 0x176f44} [bar] bar
不
{[bar] bar} [bar] bar
背后有什么理由吗?它似乎易于实现,并且具有可读性。
答案 0 :(得分:4)
您的代码中存在多个问题。您在Stirng
上定义了bar
未导出的字段,您的字段也是未导出的。这有效:
type Bar struct {
}
func (b Bar) String() string {
return "bar"
}
type foo struct {
B []Bar
BB Bar
}
func main() {
f := foo{B: []Bar{Bar{}}, BB: Bar{}}
fmt.Println(f)
}
游乐场:https://play.golang.org/p/OhoIcB7cA3。
这也适用于*Bar
。