3 回答
TA貢獻1995條經驗 獲得超2個贊
\n您需要在 JSON 之后輸出換行符或換行符 ( )。最簡單的方法可能是使用fmt.Printfeg ( 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_ 請注意,始終在操作數之間添加空格,并在使用時附加換行符。stringPrintlnPrintln
您在使用時看到單個字節值的原因fmt.Println是因為字節切片被打印為字符串或切片的未解釋字節——字節切片可以包含任何東西,而不僅僅是可打印的字符。另一方面,os.Stdout.Write將字節切片寫入標準輸出,您的終端會正確呈現它們,因為它們是可打印字符。
- 3 回答
- 0 關注
- 170 瀏覽
添加回答
舉報
