【发布时间】:2018-06-15 17:20:01
【问题描述】:
RFC 7159 说
JavaScript Object Notation (JSON) 是一种文本格式,用于 结构化数据的序列化。
但 Go 将 JSON 视为 []byte
func Marshal(v interface{}) ([]byte, error)
func Unmarshal(data []byte, v interface{}) error
为什么这些函数不接受并返回string?
我在这里找不到任何解释 https://golang.org/pkg/encoding/json/ https://blog.golang.org/json-and-go
【问题讨论】:
-
字符串在 Go 内部是一个
[]byte,使用 raw 类型有一些效率优势。 -
您在
[]byte切片中读取和写入数据,因此几乎在所有情况下都是这种类型。要求将数据转换为string有什么意义? -
不久前有人问过类似的问题:stackoverflow.com/questions/10826651/…
-
嗯,与其他问题的公认答案相比,我更符合 JimB 的评论。有很多地方适合字符串(映射键、配置的短字符串等或只读数据),但(可能令人困惑)它与您如何使用数据有关,而不是它是文本还是别的东西。
-
(我不同意对这个问题的反对意见——是的,它基于对应用于 Go 的错误字符串和文本的假设,但这是一个明确的问题,它可能对大家可以了解字符串和字节在 Go 中是如何工作的。)