我有这段代码,我在其中[]byte使用json.Marshal. 打印时,为什么在写入字符串时将fmt.Println()数字写入标准输出。os.Stdout.Write我的问题是如何fmt.Println解析[]byte.package mainimport ( "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"
1 回答
呼唤远方
TA贡献1856条经验 获得超11个赞
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,它的输出是一个字节切片,因为这是传递给写入器(网络、磁盘、存储等)的最有用的格式。
- 1 回答
- 0 关注
- 133 浏览
添加回答
举报
0/150
提交
取消