Maison > développement back-end > Golang > le corps du texte

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

王林
Libérer: 2024-02-15 12:50:09
avant
541 Les gens l'ont consulté

在 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
}
Copier après la connexion

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"
}
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal