亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 os.stdout.write 和新行輸出 json?

使用 os.stdout.write 和新行輸出 json?

Go
慕容3067478 2022-11-23 15:26:11
這里是 golang 的新手。我想簡單地將一些 json 輸出到 stdout 以進行調試。我想我做這一切都是錯誤的。這是我所擁有的: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,然后將打印出字節碼。謝謝!
查看完整描述

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"))


查看完整回答
反對 回復 2022-11-23
?
隔江千里

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

}


查看完整回答
反對 回復 2022-11-23
?
12345678_0001

TA貢獻1802條經驗 獲得超5個贊

Printf在使用包中的函數時實現此目的的典型方法是在格式字符串中fmt包含換行符。\n您不一定需要將數據寫入標準輸出,因為Printf它已經為您完成了。

另一種選擇是使用包中的Println函數,該函數fmt使用其操作數的默認格式寫入標準輸出。使用. _ bytes_ 請注意,始終在操作數之間添加空格,并在使用時附加換行符。stringPrintlnPrintln

您在使用時看到單個字節值的原因fmt.Println是因為字節切片被打印為字符串或切片的未解釋字節——字節切片可以包含任何東西,而不僅僅是可打印的字符。另一方面,os.Stdout.Write將字節切片寫入標準輸出,您的終端會正確呈現它們,因為它們是可打印字符。


查看完整回答
反對 回復 2022-11-23
  • 3 回答
  • 0 關注
  • 170 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號