如果我有这样的类型:
type myType ...
func (m myType) String() string { ... }
如何使用默认表示(即,而不是调用
fmt
)打印(使用各种 String()
函数)这种类型?我想做的是这样的:func (m myType) String() string {
// some arbitrary property
if myType.isValid() {
// format properly
} else {
// will recurse infinitely; would like default
// representation instead
return fmt.Sprintf("invalid myType: %v", m)
}
}
最佳答案
fmt.Stringer
是默认格式,在使用 %v
时会调用。如果您想要 Go 语法,请使用 %#v
。
或者,您可以完全绕过 fmt
中的反射,并按照您认为合适的方式格式化输出。
func (m myType) String() string {
return fmt.Sprintf("{Field: %s}", m.Value)
}
如果 myType 的底层类型是数字、字符串或其他简单类型,则在打印时转换为底层类型:
func (m mType) String() string {
return fmt.Sprint(int(m))
}