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!