Maison >développement back-end >Golang >Doubles accolades dans les structures lorsqu'elles sont utilisées dans Decode(&struct{}{})

Doubles accolades dans les structures lorsqu'elles sont utilisées dans Decode(&struct{}{})

王林
王林avant
2024-02-15 12:50:09549parcourir

在 Decode(&struct{}{}) 中使用时结构中的双大括号

En PHP, on peut utiliser Decode(&struct{}{}) pour décoder une structure. Cependant, il existe un cas particulier lorsque nous utilisons une structure dans la fonction Decode, nous devons utiliser des doubles accolades dans la structure. Cette utilisation peut prêter à confusion, je vais donc l'expliquer en détail ici. Lors de l'utilisation d'une structure dans la fonction Decode, les doubles accolades sont utilisées pour indiquer l'initialisation de la structure. De cette façon, nous pouvons définir et initialiser une structure en une seule instruction, rendant le code plus concis et plus facile à comprendre. Pensez donc à faire attention à l’utilisation de doubles accolades lors de l’utilisation de structures dans la fonction Décoder !

Contenu de la question

J'ai cette fonction dans certains codes. Quelles sont les doubles accolades dans une structure qui permettent de s'assurer qu'il ne s'agit pas de deux JSON ? Comment ça marche?

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
}

Solution

Décomposons-le :

  • struct{} est un type : une structure sans champs.
  • struct{}{} est une valeur littérale : une nouvelle instance du type ci-dessus.
  • &struct{}{} est un pointeur vers la valeur littérale ci-dessus.

En essayant de décoder le JSON une seconde fois, cela confirme que le corps n'a pas de deuxième document JSON après le premier, par exemple :

{
  "foo": "bar"
}
{
  "foo": "qux"
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer