常用标志
测试例子:https://play.golang.org/p/kN6pBwc4WT_F
-
%v
: v代表value, -
%+v
: 标注字段信息 -
%#v
: 用go的语法打印出来,最常用 - 字符串类:
%q
: quoted string,双引号 - 字符串类:
%#q
: 反引号,可以复制到代码中 -
%T
: 类型 - 其他:https://golang.org/pkg/fmt/
自定义 String方法
注意事项:
- 如果要方法的receiver的问题,如果要*T与T都能调用String方法,receiver必须 T
func (t T) String() string {
return fmt.Sprintf("%d/%g/%q", t.a, t.b, t.c)
}
fmt.Printf("%v\n", t)
- 注意不要在String()内引起死循环调用
type MyString string
func (m MyString) String() string {
return fmt.Sprintf("MyString=%s", m) // Error: will recur forever. %s 导致的问题,%s需要字符串,会调用String方法
}
可通过如下解决循环调用:
type MyString string
func (m MyString) String() string {
return fmt.Sprintf("MyString=%s", string(m)) // OK: note conversion. 类型转换后,启用的string.String()方法。前提条件是本质类型相同
}
网友评论