Konvertieren von UTF-8-Strings in []Byte für JSON-Unmarshalling
Um einen JSON-String in Go zu entmarshalieren, müssen wir einen [ ]Byte-Slice als Eingabe. Wenn wir nur eine UTF-8-Zeichenfolge haben, wie können wir sie dann in []Byte konvertieren?
Einfache Konvertierung und Zeichenfolge in []Byte kopieren
Der Go-Typ Das System ermöglicht uns die direkte Konvertierung von einer Zeichenfolge in []Byte mit:
s := "some text" b := []byte(s) // b is type []byte
Dieser Vorgang erstellt jedoch eine Kopie der Zeichenfolge, was bei großen Zeichenfolgen ineffizient sein kann.
Effiziente Konvertierung mit io.Reader
Eine alternative Lösung besteht darin, einen io.Reader mit strings.NewReader() zu erstellen:
s := `{"somekey":"somevalue"}` r := strings.NewReader(s)
Dieser io.Reader kann dann übergeben werden zu json.NewDecoder() zum Unmarshalling, ohne eine Zeichenfolgenkopie zu erstellen:
var result interface{} err := json.NewDecoder(r).Decode(&result)
Overhead-Überlegungen
Die Verwendung von strings.NewReader() und json.NewDecoder() hat etwas Mehraufwand, daher kann bei kleinen JSON-Strings die direkte Konvertierung in []Byte effizienter sein:
s := `{"somekey":"somevalue"}` var result interface{} err := json.Unmarshal([]byte(s), &result)
Direkte io.Reader-Eingabe
Wenn der JSON-String Die Eingabe steht als io.Reader zur Verfügung (z. B. eine Datei oder eine Netzwerkverbindung) und kann direkt an json.NewDecoder() übergeben werden:
var result interface{} err := json.NewDecoder(myReader).Decode(&result)
Dadurch entfallen Zwischenkonvertierungen oder Kopien.
Das obige ist der detaillierte Inhalt vonWie konvertiert man einen UTF-8-String effizient in []Byte für das JSON-Unmarshalling in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!