Decode(&struct{}{}) で使用される場合の構造内の二重中括弧

王林
リリース: 2024-02-15 12:50:09
転載
541 人が閲覧しました

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

PHP では、Decode(&struct{}{}) を使用して構造体をデコードできます。ただし、Decode 関数で構造体を使用する場合は特殊な場合があり、構造体で二重中括弧を使用する必要があります。この使い方はわかりにくいかもしれないので、ここで詳しく説明します。 Decode 関数で構造体を使用する場合、二重中括弧は構造体の初期化を示すために使用されます。このようにして、1 つのステートメントで構造の定義と初期化を行うことができるため、コードがより簡潔で理解しやすくなります。したがって、Decode 関数で構造体を使用するときは、二重中括弧の使用に注意することを忘れないでください。

質問内容

コードの中にこの関数があります。 2 つの 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 ドキュメントの後に 2 番目の JSON ドキュメントがないことが確認されます。次に例を示します。

リーリー

以上がDecode(&struct{}{}) で使用される場合の構造内の二重中括弧の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:stackoverflow.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート