Maison  >  Article  >  développement back-end  >  Comment convertir efficacement une chaîne UTF-8 en [] octet pour le démarshalling JSON dans Go ?

Comment convertir efficacement une chaîne UTF-8 en [] octet pour le démarshalling JSON dans Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-30 21:50:02433parcourir

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

Conversion de chaînes UTF-8 en []octet pour le démarshalling JSON

Pour démarshaler une chaîne JSON dans Go, nous devons fournir un [ ]tranche d'octets en entrée. Si nous n'avons qu'une chaîne UTF-8, comment pouvons-nous la convertir en []byte ?

Conversion simple et chaîne en []byte Copy

Le type Go Le système nous permet de convertir directement une chaîne en []octet en utilisant :

s := "some text"
b := []byte(s) // b is type []byte

Cependant, cette opération crée une copie de la chaîne, ce qui peut être inefficace pour les grandes chaînes.

Conversion efficace à l'aide de io.Reader

Une solution alternative consiste à créer un io.Reader à l'aide de strings.NewReader() :

s := `{"somekey":"somevalue"}`
r := strings.NewReader(s)

Ce io.Reader peut ensuite être transmis à json.NewDecoder() pour le désorganisation sans créer de copie de chaîne :

var result interface{}
err := json.NewDecoder(r).Decode(&result)

Considérations générales

L'utilisation de strings.NewReader() et json.NewDecoder() a une certaine surcharge, donc pour les petites chaînes JSON, la conversion directe en []byte peut être plus efficace :

s := `{"somekey":"somevalue"}`
var result interface{}
err := json.Unmarshal([]byte(s), &result)

Entrée directe io.Reader

Si la chaîne JSON l'entrée est disponible en tant que io.Reader (par exemple, un fichier ou une connexion réseau), elle peut être transmise directement à json.NewDecoder() :

var result interface{}
err := json.NewDecoder(myReader).Decode(&result)

Cela élimine le besoin de conversions ou de copies intermédiaires.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn