這里是golang的新手。我想簡單地將一些 json 輸出到標準輸出以進行除錯。我想我對這一切都錯了。這是我所擁有的:
type SomeObject struct {
Thing1 string
Thing2 string
Thing3 otherStruct
}
...
someObject = &SomeObject{
Thing1: "hello",
Thing2: "world",
...
}
someObjectLogEntry, err := json.Marshal(someObject)
if err != nil {
fmt.Println("error:", err)
}
os.Stdout.Write(someObjectLogEntry)
當我運行它時,它將 json 輸出為一行,但是我的服務也有一個心跳,所以兩者一致并在同一行中輸出兩個東西,例如:
{/// All that json content }[GIN] 2022/03/16 - 02:07:16 | 200 | 1.16μs | 127.0.0.1 | GET "/heartbeat"
做我正在做的事情的正確方法是什么(簡單地構造一個json物件并輸出它)?如果我這樣做fmt.println,它將列印出位元組碼。謝謝!
uj5u.com熱心網友回復:
\n您需要在 JSON 之后輸出換行符或換行符 ( )。最簡單的方法可能是使用fmt.Printf例如(游樂場)
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"))
uj5u.com熱心網友回復:
Printf在使用包中的函式時實作此目的的典型方法是在格式字串中fmt包含換行符。\n您不一定需要將資料寫入標準輸出,因為Printf這樣做是為您服務的。
另一種選擇是使用包中的Println函式,該函式fmt使用默認格式將其運算元寫入標準輸出。使用時需要將 JSON 轉換bytes為. 請注意,始終在運算元之間添加空格,并在使用時添加換行符。stringPrintlnPrintln
您在使用時看到單個位元組值的原因fmt.Println是因為位元組切片被列印為字串或切片的未解釋位元組 - 位元組切片可以包含任何內容,而不僅僅是可列印的字符。另一方面,os.Stdout.Write將位元組切片寫入標準輸出,您的終端會正確呈現它們,因為它們是可列印的字符。
uj5u.com熱心網友回復:
最干凈的方法是使用 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
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/444751.html
