go关于包提供String()方法简要说明

Q:结构体属性如果是指针,通过 logs.CtxInfo 打印出来的是 指针地址; 有办法输出指针指向的值吗? 查了一下都是说要对结构体实现 string() 方法; 但问题是我这个结构体是通过 Thrift 定义生成的,自动生成的 string() 也只是通过 fmt.Sprintf 打印了一下。

package arg
// 定义一个结构体包装一下要打印的内容
type Arg struct {
  obj interface{}
}
// 对新定义的结构体实现 Stringer 接口,返回 JSON 字符串
func (a*Arg)String()string{
  return toJSON(a.obj)
}
// arg 包暴露一个包装函数
func JSON(obj interface{}) *Arg{
 return &Arg{obj}
}

/*---
使用时:
logs. CtxInfo(ctx, "foo = %s", arg. JSON (foo) )
 - 当日志级别是 Debug 时,不会执行 ToString 不会执行 tojson 不会浪费性能
 - 应该使用 %v 或 %s 格式化,不要用 %+v 或 %#v 否则会把 Arg 结构体打车出来
*/
posted @ 2022-02-28 10:46  梧桐花落  阅读(234)  评论(0编辑  收藏  举报