Heim  >  Artikel  >  Backend-Entwicklung  >  Wie konvertiert man einen UTF-8-String effizient in []Byte für das JSON-Unmarshalling in Go?

Wie konvertiert man einen UTF-8-String effizient in []Byte für das JSON-Unmarshalling in Go?

Linda Hamilton
Linda HamiltonOriginal
2024-10-30 21:50:02361Durchsuche

How to Efficiently Convert a UTF-8 String to []byte for JSON Unmarshalling in Go?

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!

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