Heim  >  Artikel  >  Backend-Entwicklung  >  Interpretation von Go-Sprachdokumenten: Detaillierte Erläuterung des Typs „encoding/json.Encoder“.

Interpretation von Go-Sprachdokumenten: Detaillierte Erläuterung des Typs „encoding/json.Encoder“.

WBOY
WBOYOriginal
2023-11-03 15:13:18925Durchsuche

Interpretation von Go-Sprachdokumenten: Detaillierte Erläuterung des Typs „encoding/json.Encoder“.

In der Go-Sprache ist das Paket „encoding/json“ eine Standardbibliothek zur Verarbeitung von Daten im JSON-Format (JavaScript Object Notation). In dieser Bibliothek wird ein Encoder-Typ bereitgestellt, der Strukturen oder andere Datentypen in der Go-Sprache in Binärdaten codieren kann, die dem JSON-Format entsprechen. In diesem Artikel wird dieser Typ ausführlich erläutert und spezifische Codebeispiele bereitgestellt.

Definition des Encoder-Typs

Werfen wir zunächst einen Blick auf die Definition des Encoder-Typs:

type Encoder struct {
    w       io.Writer
    err     error
    h       *encodeState
    generic bool
}

Wie aus der Definition hervorgeht, ist der Encoder-Typ ein Strukturtyp mit den folgenden vier Feldern:

  • w: verwendet für die Ausgabekodierung Die io.Writer-Schnittstelle der endgültigen Daten
  • err: zeichnet Fehlerinformationen auf, die während des Kodierungsprozesses auftreten können
  • h: die encodeState-Struktur, die zum Speichern von Kodierungsparametern und Cache verwendet wird
  • generic: ob der Tag-Encoder Universal unterstützt Codierungs-Tags

Encoder-Typ-Methoden

Encoder-Typ bietet die folgenden Methoden:

func NewEncoder(w io.Writer) *Encoder

NewEncoder-Methode wird zum Erstellen einer Encoder-Typ-Instanz verwendet und muss einen io.Writer übergeben Schnittstellenobjekt als Parameter. Das Folgende ist ein Beispielcode zum Erstellen einer Encoder-Instanz:

package main

import (
    "encoding/json"
    "os"
)

func main() {
    type Movie struct {
        Title  string
        Year   int
        Actors []string
    }

    movie := Movie{
        Title:  "Inception",
        Year:   2010,
        Actors: []string{"Leonardo DiCaprio", "Ellen Page", "Tom Hardy"},
    }

    encoder := json.NewEncoder(os.Stdout)
    encoder.Encode(movie)
}

Im obigen Beispielcode erstellen wir eine Strukturinstanz vom Typ „Film“, codieren sie und geben sie auf der Standardausgabe aus.

func (enc *Encoder) Encode(v interface{}) error

Die Encode-Methode wird verwendet, um den eingehenden Datentyp (v) JSON zu kodieren und das Kodierungsergebnis in den io.Writer des Encoder-Instanzobjekts zu schreiben. Tritt beim Kodieren ein Fehler auf, wird die entsprechende Fehlermeldung zurückgegeben. Das Folgende ist ein Beispielcode für die Encode-Methode:

package main

import (
    "encoding/json"
    "os"
)

func main() {
    type Movie struct {
        Title  string
        Year   int
        Actors []string
    }

    movie := Movie{
        Title:  "Inception",
        Year:   2010,
        Actors: []string{"Leonardo DiCaprio", "Ellen Page", "Tom Hardy"},
    }

    file, _ := os.Create("movie.json")
    encoder := json.NewEncoder(file)
    encoder.Encode(movie)
    file.Close()
}

Im obigen Beispielcode erstellen wir eine Strukturinstanz vom Typ „Film“, kodieren sie und schreiben sie in die Datei „movie.json“.

func (enc *Encoder) SetIndent(prefix, indent string)

SetIndent-Methode wird verwendet, um das Einrückungsformat der JSON-codierten Ausgabe festzulegen. Sie empfängt zwei Zeichenfolgenparameter, die jeweils „Präfix“ und „Einzug“ darstellen. Das Folgende ist ein Beispielcode für die SetIndent-Methode:

package main

import (
    "encoding/json"
    "os"
)

func main() {
    type Movie struct {
        Title  string
        Year   int
        Actors []string
    }

    movie := Movie{
        Title:  "Inception",
        Year:   2010,
        Actors: []string{"Leonardo DiCaprio", "Ellen Page", "Tom Hardy"},
    }

    file, _ := os.Create("movie.json")
    encoder := json.NewEncoder(file)
    encoder.SetIndent("", "    ")
    encoder.Encode(movie)
    file.Close()
}

Im obigen Beispielcode verwenden wir die SetIndent-Methode, um das Einrückungspräfix auf leer und die Einrückungszeichenfolge auf vier Leerzeichen zu setzen und dann die codierten Daten im JSON-Format in den Film zu schreiben .json-Datei.

func (enc *Encoder) SetEscapeHTML(on bool)

SetEscapeHTML-Methode wird verwendet, um festzulegen, ob das Encoder-Instanzobjekt HTML-Tags maskieren muss. Der Standardwert ist true. Wenn der on-Parameter „true“ ist, wird das HTML-Tag maskiert; wenn der on-Parameter „false“ ist, erfolgt die Ausgabe im ursprünglichen String-Format. Das Folgende ist ein Beispielcode für die SetEscapeHTML-Methode:

package main

import (
    "encoding/json"
    "os"
)

func main() {
    type Example struct {
        Name     string
        HTMLBody string `json:"body"`
    }

    example := Example{
        Name:     "example",
        HTMLBody: "<h1>This is a heading</h1>
<p>This is a paragraph.</p>",
    }

    file, _ := os.Create("example.json")
    encoder := json.NewEncoder(file)
    encoder.SetEscapeHTML(false)
    encoder.Encode(example)
    file.Close()
}

Im obigen Beispielcode verwenden wir die SetEscapeHTML-Methode, um das HTML-Tag im ursprünglichen Zeichenfolgenformat auszugeben.

Zusammenfassung

Der Encoder-Typ ist ein Kerntyp, der für die JSON-Codierung im Paket „coding/json“ in der Sprache Go verwendet wird. Sein Implementierungsprinzip besteht darin, Strukturen oder andere Datentypen in Binärdaten zu konvertieren konform zum JSON-Format und geben Sie es an den angegebenen io.Writer aus. Wenn wir den Encoder-Typ verwenden, können wir Codierungsparameter festlegen, JSON-Codierung und andere Vorgänge durchführen, indem wir seine öffentlichen Methoden aufrufen.

Das obige ist der detaillierte Inhalt vonInterpretation von Go-Sprachdokumenten: Detaillierte Erläuterung des Typs „encoding/json.Encoder“.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn