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 结构体打车出来
*/