首页 > 文章列表 > 在 Decode 函数中使用的双大括号中的结构体

在 Decode 函数中使用的双大括号中的结构体

222 2024-02-28
问题内容

我在一些代码中有这个函数。 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"
}