理解fmt.Println 對結構體成員的行為
在Go 中,當我們在結構體上調用fmt.Println 時,我們期望它輸出結構體成員使用各自的String() 方法的字串表示形式。然而,情況並非總是如此。
考慮以下程式碼:
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) }
在此程式碼中,我們使用String() 方法定義一個bar 類型,該方法傳回字串「bar」 」。我們也定義了一個帶有欄位b 和bb 的foo 類型,它們分別是切片和指向bar 類型的指標。 f.bb 上呼叫fmt.Println 時,我們得到以下輸出:
這和我們想像的不一樣,是:{[0x176f44] 0x176f44} [bar] bar
{[bar] bar} [bar] bar
fmt.Println 在呼叫時不使用成員的String()方法有幾個原因在結構體上:
以上是為什麼 fmt.Println 在 Go 中不使用 Struct 的成員 String() 方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!