我有这段代码,我[]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)
}
Run Code Online (Sandbox Code Playgroud)
我得到以下输出
[34 77 121 32 115 116 114 105 110 103 34]
"My string"
Run Code Online (Sandbox Code Playgroud)
fmt.Println为字节切片生成友好格式。因为字节切片可以包含任何内容(而不仅仅是可打印的字符),所以它会显示各个字节值。根据文档:字节切片打印为:
字符串或切片的未解释字节
另一方面,os.Stdout.Write将字节片写入标准输出。因为它们是可打印的字符,所以您的终端可以正确呈现它们。
尝试使用不可打印的字符,fmt.Println的行为原因将变得清晰:
func main() {
dat := []byte{0, 1, 2, 3, 4}
fmt.Println(dat)
os.Stdout.Write(dat)
}
Run Code Online (Sandbox Code Playgroud)
输出:
[0 1 2 3 4]
XXXX // four non-printable character placeholders (based on your terminal)
Run Code Online (Sandbox Code Playgroud)
至于 json,它的输出是一个字节片,因为这是传递给编写器(网络、磁盘、存储等)的最有用的格式。
| 归档时间: |
|
| 查看次数: |
551 次 |
| 最近记录: |