In Go, a []byte slice stores raw binary data. When attempting to encode a struct containing []byte fields into JSON using json.Marshal(), the resulting JSON contains an unexpected string representation of the slice contents instead of the original binary data. For example:
<code class="go">type Msg struct { Content []byte } func main() { msg := Msg{[]byte("Hello")} json, _ := json.Marshal(msg) fmt.Println(string(json)) // Prints {"Content":"SGVsbG8="} }</code>
json.Marshal() encodes []byte slices as base64-encoded strings because JSON does not have a native representation for raw bytes. Base64 encoding represents binary data using a sequence of printable ASCII characters.
To retrieve the original binary data from the base64-encoded string in the JSON, simply decode the string using the base64.StdEncoding.DecodeString function:
<code class="go">import "encoding/base64" func main() { ... decodedBytes, _ := base64.StdEncoding.DecodeString(msg.Content) fmt.Println(string(decodedBytes)) // Prints "Hello" }</code>
The above is the detailed content of How to Handle Binary Data in Go JSON Encoding?. For more information, please follow other related articles on the PHP Chinese website!