2 回答
TA贡献1744条经验 获得超4个赞
对称对中的势函数是:
func Marshal(v interface{}) ([]byte, error) // 1
func Unmarshal(data []byte) (interface{}, error) // 2
func Marshal(v interface{}, data *[]byte) error // 3
func Unmarshal(data []byte, v interface{}) error // 4
函数#3 和#4 可能看起来不对称,因为data#3的参数是指针类型,v而#4的参数没有声明为指针类型。它们实际上是对称的,因为传递给v#4的参数的实际值必须是一个指针。如果它不是指针,该函数将返回错误。
函数#2 不可行,因为该函数无法访问应用程序的结果类型。如果函数不知道该类型,则该函数无法将 JSON 解组为类型。此外,应用程序需要键入 assert 结果才能使用它。标准库尽可能避免类型断言。
功能#3 不是惯用的。Go 中很少使用指向切片的指针。我不记得在标准库中使用过任何东西,但我相信如果有的话,有人会在这里留下评论。
我们留下了#1 和#4 的不对称对:
func Marshal(v interface{}) ([]byte, error) // 1
func Unmarshal(data []byte, interface{}) error // 4
TA贡献1906条经验 获得超10个赞
通过Marshal
返回一个字节数组,您可以轻松地将其传递给诸如bufio.Writer.Write()
将字节数组作为参数的函数。在编写提供 JSON 的 Web 服务时,您可能会遇到其中之一。
如果您正在使用Unmarshal
,那么您很可能正在从 JSON 中读取数据。通过Unmarshal
采用与Marshal
返回相同的第一个参数,您可以获得任何已由 输出的 JSON Marshal
,并将其直接传递给Unmarshal
。
- 2 回答
- 0 关注
- 253 浏览
添加回答
举报