fmt.Println vs os.Stdout.Write

我有这段代码,我在其中[]byte使用json.Marshal. 打印时,为什么在写入字符串时将fmt.Println()数字写入标准输出。os.Stdout.Write


我的问题是如何fmt.Println解析[]byte.


package main


import (

        "encoding/json"

        "fmt"

        "os"

    )


func main(){

    str := "My string"

    dat,_:= json.Marshal(str)

    fmt.Println(dat)

    os.Stdout.Write(dat)

}

我得到以下输出


[34 77 121 32 115 116 114 105 110 103 34]

"My string"


互换的青春
浏览 137回答 1
1回答

呼唤远方

fmt.Println为字节片生成友好格式。因为字节切片可以包含任何内容(而不仅仅是可打印的字符),它会向您显示各个字节值。根据文档:字节切片打印为:字符串或切片的未解释字节另一方面,os.Stdout.Write将字节片写入标准输出。因为它们是可打印的字符,所以您的终端可以正确呈现它们。用不可打印的字符试一试,fmt.Println' 行为的原因就会变得清晰:func main() {    dat := []byte{0, 1, 2, 3, 4}    fmt.Println(dat)    os.Stdout.Write(dat)}输出:[0 1 2 3 4]XXXX // four non-printable character placeholders (based on your terminal)至于 json,它的输出是一个字节切片,因为这是传递给写入器(网络、磁盘、存储等)的最有用的格式。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go