Maison >développement back-end >Golang >Pourquoi « json.Marshal » de Go encode-t-il « []byte » en tant que chaîne Base64 ?

Pourquoi « json.Marshal » de Go encode-t-il « []byte » en tant que chaîne Base64 ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-10 01:23:10336parcourir

Why Does Go's `json.Marshal` Encode `[]byte` as a Base64 String?

Marshaling []byte vers JSON

Dans Go, le marshaling []byte vers JSON diffère légèrement des autres types de données. Au lieu de coder directement les octets sous forme de tableau, le package JSON code []byte sous forme de chaîne codée en base64. Ce comportement est explicitement indiqué dans la documentation pour encoding/json :

Array and slice values encode as JSON arrays, except that []byte encodes as a base64-encoded string, and a nil slice encodes as the null JSON object.

Base64-Encoded String Output

Dans votre cas, la sortie de json.Marshal( groupe) contient « AAAAQID ». Cela représente l'encodage base64 de votre []byte slice :

originalBytes := []byte{0, 0, 0, 1, 2, 3}
encodedString := base64.StdEncoding.EncodeToString(originalBytes)

fmt.Println(encodedString) // Output: AAAAAQID

Décodage des données Base64

Pour récupérer les valeurs []byte d'origine de la chaîne encodée, vous peut décoder les données base64 :

decodedBytes, err := base64.StdEncoding.DecodeString("AAAAAQID")
if err != nil {
    // Handle error
}

fmt.Println(decodedBytes) // Output: [0 0 0 1 2 3]

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