如果我有这样的类型:

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))
}

10-06 05:38
查看更多