在 PHP 中,我们可以使用 Decode(&struct{}{}) 来解码一个结构体。然而,有一种特殊情况是当我们在 Decode 函数中使用结构体时,我们需要在结构体中使用双大括号。这种用法可能会让人感到困惑,因此在这里我将为大家详细解释一下这个问题。在 Decode 函数中使用结构体时,双大括号的作用是用来表示结构体的初始化。通过这种方式,我们可以在一个语句中定义并初始化一个结构体,使代码更加简洁和易于理解。所以,记得在 Decode 函数中使用结构体时,要注意双大括号的使用方式哦!
问题内容
我在一些代码中有这个函数。 struct 中有助于确定它不是两个 JSON 的双大括号是什么?它是如何工作的?
func readJSON(w http.ResponseWriter,r *http.Request,data interface{}) error {
maxBytes := 1024 * 1024
r.Body = http.MaxBytesReader(w,r.Body,int64(maxBytes))
dec := json.NewDecoder(r.Body)
dec.DisallowUnknownFields()
err := dec.Decode(data)
if err != nil {
return err
}
err = dec.Decode(&struct{}{})
if err != io.EOF {
return errors.New("Body must Only contain 1 json ")
}
return nil
}
登录后复制
解决方法
让我们分解一下:
struct{}
是一种类型:没有字段的结构。struct{}{}
是一个文字值:上述类型的新实例。&struct{}{}
是指向上述文字值的指针。
通过尝试第二次解码 JSON,它确认正文在第一个 JSON 文档之后没有第二个 JSON 文档,例如:
{
"foo": "bar"
}
{
"foo": "qux"
}
登录后复制
以上就是在 Decode(&struct{}{}) 中使用时结构中的双大括号的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!