go - 如何打印结构的 []byte 成员字符串
问题描述
我有以下结构:
type foo struct {
number int
data []byte
}
我想以“漂亮”的方式从结构中打印一个对象。我所做的:
obj := foo{
number: 1,
data: []byte("json"),
}
fmt.Printf("Obj: %+v", obj)
我得到什么:
Obj: {number:1 data:[106 115 111 110]}
我想要的是:
Obj: {number:1 data:"json"}
我可以在不实现 Stringer 或使用反射的情况下做到这一点吗?
解决方案
(免责声明:我认为仅使用 %q 进行调试打印会更好,但这取决于您的需求。我添加此替代方法只是因为GoStringer接口是一个有趣的技巧)。
%q 之外的另一种方法是用实现 GoStringer 接口的类型包装 []byte,这将被调用格式化%#v
。假设我们有:
type PrintableBuffer []byte
func (b PrintableBuffer) GoString() string {
return string(b)
}
现在我们定义结构:
type foo struct {
number int
Data PrintableBuffer
}
(要使这个技巧起作用,您需要该成员是公开的:/)
接着:
func main() {
obj := foo{
number: 1,
Data: PrintableBuffer("json"),
}
fmt.Printf("Obj: %#v", obj)
}
将打印出:
Obj: main.foo{number:1, Data:json}
推荐阅读
- swift - SwiftUI:输入url时WebKit不断加载页面
- python - Discord Bot 不加入语音聊天 (Python)
- next.js - Next.js:在服务器启动时运行方法
- javascript - 模态反应js中的swiper问题
- powershell - 以编程方式使用powershell关闭另一个域中的远程计算机
- python - Python 3.9,没有输出的 print(file1.read)
- flutter - 在 textField Flutter 中只输入偶数
- android - 使用 setState 或其他方式刷新 FutureBuilder
- vba - VBA - 自动过滤然后将结果复制到新工作表中
- asp.net-mvc - Entity Framework Core 5 - 在表上引入 FOREIGN KEY 约束可能会导致循环或多个级联路径