首頁 > 後端開發 > Golang > 為什麼 `fmt.Println()` 不呼叫我的 Stringer 方法?

為什麼 `fmt.Println()` 不呼叫我的 Stringer 方法?

Linda Hamilton
發布: 2024-12-04 08:34:12
原創
584 人瀏覽過

Why Doesn't `fmt.Println()` Call My Stringer Method?

為什麼在使用fmt.Println() 時未呼叫我的Stringer 介面方法

您在* 上定義了一個String()方法Car,但是當使用fmt.Println(myCar) 時,您的物件是一個值而不是指標。此行為是由於 fmt.Println() 隱式將 myCar 物件轉換為 interface{} 類型的值,然後使用類型開關來確定如何列印它。

fmt 套件中的類型開關檢查對於 fmt.Stringer 類型的情況。但是,此檢查失敗,因為 Car(而不是 *Car)實作了 String() 方法。手動呼叫 String() 是可行的,因為編譯器會自動將 myCar.String() 轉換為 (&myCar).String(),並提供必要的指標。

要解決此問題,您有兩個選擇:

  • 在 Car 上實作 String() 而不是 *Car。
  • 總是傳遞一個指標fmt.Println():
fmt.Println(&myCar)
登入後複製

以上是為什麼 `fmt.Println()` 不呼叫我的 Stringer 方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板