Heim  >  Artikel  >  Backend-Entwicklung  >  Doppelte geschweifte Klammern in Strukturen bei Verwendung in Decode(&struct{}{})

Doppelte geschweifte Klammern in Strukturen bei Verwendung in Decode(&struct{}{})

王林
王林nach vorne
2024-02-15 12:50:09534Durchsuche

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

In PHP können wir Decode(&struct{}{}) verwenden, um eine Struktur zu dekodieren. Es gibt jedoch einen Sonderfall, wenn wir eine Struktur in der Dekodierfunktion verwenden. Wir müssen in der Struktur doppelte geschweifte Klammern verwenden. Diese Verwendung kann verwirrend sein, daher erkläre ich sie hier ausführlich. Bei Verwendung einer Struktur in der Dekodierfunktion werden die doppelten geschweiften Klammern verwendet, um die Initialisierung der Struktur anzuzeigen. Auf diese Weise können wir eine Struktur in einer Anweisung definieren und initialisieren, wodurch der Code prägnanter und verständlicher wird. Denken Sie daher daran, bei der Verwendung von Strukturen in der Decode-Funktion auf die Verwendung doppelter Klammern zu achten!

Frageninhalt

Ich habe diese Funktion in einem Code. Welche doppelten Klammern in der Struktur helfen sicherzustellen, dass es sich nicht um zwei JSONs handelt? Wie funktioniert es?

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
}

Lösung

Lassen Sie es uns aufschlüsseln:

  • struct{} ist ein Typ: eine Struktur ohne Felder.
  • struct{}{} ist ein Literalwert: eine neue Instanz des oben genannten Typs.
  • &struct{}{} ist ein Hinweis auf den obigen Literalwert.

Durch den Versuch, das JSON ein zweites Mal zu dekodieren, wird bestätigt, dass der Text nach dem ersten kein zweites JSON-Dokument enthält, zum Beispiel:

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

Das obige ist der detaillierte Inhalt vonDoppelte geschweifte Klammern in Strukturen bei Verwendung in Decode(&struct{}{}). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen