3 回答

TA貢獻1801條經(jīng)驗 獲得超16個贊
fmt.Stringer 是默認格式,在您使用%v. 如果您想要 Go 語法,請使用%#v.
或者,您可以fmt完全繞過反射,并按照您認為合適的方式格式化輸出。
func (m myType) String() string {
return fmt.Sprintf("{Field: %s}", m.Value)
}
如果 myType 的底層類型是數(shù)字、字符串或其他簡單類型,則在打印時轉換為底層類型:
func (m mType) String() string {
return fmt.Sprint(int(m))
}

TA貢獻1802條經(jīng)驗 獲得超5個贊
%#v如果您想讓基礎類型String工作或您的類型是類型別名,則使用格式不是正確的答案。
如Effective Go 中所述,只需將其轉換回它所代表的類型:
type Foo int
func (f Foo) String() string {
if f == 0 {
return "foo"
}
return fmt.Sprintf("%v", int(f)) // N.B.
}
func main() {
fmt.Println(Foo(0))
fmt.Println(Foo(42))
}
編輯:正如其他人在評論中指出的那樣,如果您的類型是結構,%#v那么除了將其轉換為具有相同字段的匿名結構類型之外,使用格式似乎是唯一的方法。
- 3 回答
- 0 關注
- 302 瀏覽
添加回答
舉報