3 回答
TA贡献1995条经验 获得超2个赞
\n
您需要在 JSON 之后输出换行符或换行符 ( )。最简单的方法可能是使用fmt.Printf
eg ( playground )
type SomeObject struct {
Thing1 string
Thing2 string
}
someObject := &SomeObject{
Thing1: "hello",
Thing2: "world",
}
someObjectLogEntry, err := json.Marshal(someObject)
if err != nil {
fmt.Println("error:", err)
}
fmt.Printf("%s\n", someObjectLogEntry)
os.Stdout.Write([]byte("something else\n"))
TA贡献1906条经验 获得超10个赞
最干净的方法是将 json.Encoder 用于 os.Stdout。
json.Encoder 已经为每条写入的消息附加了一个换行符,并且比使用带有 json 字节的 fmt 更有效。
您可以重新使用 json 编码器,而不是调用 json.Marshal 然后为每条消息进行某种类型的单独写入。
import (
"os"
"encoding/json"
)
type SomeObject struct {
Thing1 string
Thing2 string
Thing3 otherStruct
}
...
encoder := json.NewEncoder(os.Stdout)
someObject = &SomeObject{
Thing1: "hello",
Thing2: "world",
...
}
if err := encoder.Encode(&someObject); err != nil {
// handle error
}
TA贡献1802条经验 获得超5个赞
Printf
在使用包中的函数时实现此目的的典型方法是在格式字符串中fmt
包含换行符。\n
您不一定需要将数据写入标准输出,因为Printf
它已经为您完成了。
另一种选择是使用包中的Println
函数,该函数fmt
使用其操作数的默认格式写入标准输出。使用. _ bytes
_ 请注意,始终在操作数之间添加空格,并在使用时附加换行符。string
Println
Println
您在使用时看到单个字节值的原因fmt.Println
是因为字节切片被打印为字符串或切片的未解释字节——字节切片可以包含任何东西,而不仅仅是可打印的字符。另一方面,os.Stdout.Write
将字节切片写入标准输出,您的终端会正确呈现它们,因为它们是可打印字符。
- 3 回答
- 0 关注
- 90 浏览
添加回答
举报