使用 %v 列印:需要考慮的潛在問題
雖然 %v 動詞允許列印整數 (%d)和字串(%s),應謹慎考慮其使用以避免意外格式化
預設格式與特定格式
與%d 動詞不同,%d 動詞指示fmt 套件將數值列印為數字(基數為10), %v 動詞使用預設格式。可以透過為自訂類型實作 fmt.Stringer 介面(使用 String() 字串方法)來覆寫此預設格式。
範例
考慮以下程式碼使用實作fmt.Stringer 的自訂類型MyInt介面:
type MyInt int func (mi MyInt) String() string { return fmt.Sprintf("*%d*", int(mi)) } func main() { var mi MyInt = 2 fmt.Printf("%d %v", mi, mi) }
輸出:
2 *2*
輸出:輸出:
輸出: >
使用%v 時,fmt套件檢查該值是否實作 fmt.Stringer 並呼叫其 String()方法。這會導致值以覆蓋的格式顯示(“GoStringer(帶#v):呼叫GoStringer方法。
String() 方法:如果實作 String() 字串,將其值轉換為字串。
Error 方法:如果實作 error 接口,則使用 Error方法將其值轉換為字串。 結論雖然技術上可以始終使用%v 進行列印,但通常建議使用特定動詞就像整數和字串的%d 和% s 一樣。如果您的類型實作某些接口,特別是 fmt.Stringer,則使用 %v 可能會導致意外的格式化行為。以上是在 Go 中什麼時候應該使用 `%v` 進行列印?的詳細內容。更多資訊請關注PHP中文網其他相關文章!