Maison >développement back-end >Golang >Comment encoder et décoder efficacement les structures de données dans Go ?

Comment encoder et décoder efficacement les structures de données dans Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-29 01:28:30883parcourir

How to Efficiently Encode and Decode Data Structures in Go?

Encodage et décodage des structures de données dans Go

En Go, il est souvent nécessaire d'encoder et de décoder les structures de données dans un tableau d'octets pour la transmission ou du stockage. Cet article explore les techniques permettant d'effectuer cette tâche de manière efficace et robuste.

Pour effectuer une conversion de type, utilisez le package non sécurisé avec prudence. Une alternative plus sûre consiste à exploiter le package encoding/binary, comme indiqué ci-dessous :

<code class="go">// T represents a simple data structure.
type T struct {
    A int64
    B float64
}

// EncodeT converts the T struct to a byte array.
func EncodeT(t T) ([]byte, error) {
    buf := &bytes.Buffer{}
    err := binary.Write(buf, binary.BigEndian, t)
    return buf.Bytes(), err
}

// DecodeT converts a byte array to a T struct.
func DecodeT(b []byte) (T, error) {
    t := T{}
    buf := bytes.NewReader(b)
    err := binary.Read(buf, binary.BigEndian, &t)
    return t, err
}</code>

Exemple d'utilisation :

<code class="go">t := T{A: 0xEEFFEEFF, B: 3.14}
encoded, err := EncodeT(t)
if err != nil {
    panic(err)
}

decoded, err := DecodeT(encoded)
if err != nil {
    panic(err)
}

fmt.Printf("Encoded: %x", encoded)
fmt.Printf("Decoded: %x %f", decoded.A, decoded.B)</code>

Les fonctions de conversion personnalisées ou le package encoding/gob peuvent également être utilisés. pour des cas d'utilisation plus complexes.

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