![](/img/trans.png)
[英]Why does fmt.Println in Go print the verb %s literal instead of the value?
[英]Why fmt.Println a struct does not use String() method of it's members
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
上定義Stirng
,您的字段也未導出。 這有效:
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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.