Maison  >  Article  >  développement back-end  >  Convertir la structure Golang en octet

Convertir la structure Golang en octet

WBOY
WBOYoriginal
2023-05-10 22:54:361580parcourir

En programmation, la sérialisation et la désérialisation des données sont des tâches très courantes. Dans Golang, nous pouvons utiliser le package "encoding/binary" de la bibliothèque standard pour convertir les structures de données en séquences d'octets, ce qui est particulièrement utile dans la transmission et le stockage de données. Cet article explique comment convertir une structure en une séquence d'octets à l'aide de Golang.

1. Structure dans Golang

Dans Golang, une structure est une structure de données définie par l'utilisateur qui nous permet de combiner différents types de données pour former un type de données plus complexe. La syntaxe pour définir une structure est la suivante :

type 结构体名 struct {
  字段名1 数据类型1
  字段名2 数据类型2
  ……
}

Par exemple, nous pouvons définir une structure Personne pour représenter les informations d'une personne :

type Person struct {
  Name string
  Age int
  Height float64
}

2 Séquence d'octets en Golang
Dans Golang, vous pouvez utiliser des tranches d'octets pour représenter la section des mots. séquence, qui peut sérialiser une structure de données en une séquence d'octets pour la transmission ou le stockage dans un fichier. Par exemple, nous pouvons créer une tranche d'octets vide en utilisant l'instruction suivante :

b := make([]byte, 0)

3. Convertir la structure en une séquence d'octets

Le package "encoding/binary" de Golang fournit un ensemble d'outils pour convertir les types de données Golang en fonctions. pour les séquences d'octets. Pour les structures, nous pouvons utiliser la fonction "binary.Write" pour la convertir en une séquence d'octets. Voici un exemple :

package main

import (
  "encoding/binary"
  "fmt"
)

type Person struct {
  Name string
  Age int
  Height float64
}

func main() {
  p := Person{"Tom", 20, 1.8}
  b := make([]byte, 0)

  binary.Write(&b, binary.LittleEndian, p)

  fmt.Println(b)
}

Dans cet exemple, nous créons une structure Person, la sérialisons en tranches d'octets en mode binaire, puis produisons les tranches d'octets. Nous pouvons voir que le résultat est :

[3 84 111 109 20 0 0 0 0 0 0 0 0 0 0 0 236 81 184 30 133 235 64]

Cette sortie est en fait le résultat de la conversion de "Tom", "20" et "1.8" en une séquence d'octets. Le mode binaire est utilisé ici, ainsi que le mode petit-boutiste (c'est-à-dire que l'octet de poids faible est stocké à la position de départ).

Nous pouvons voir que la séquence d'octets générée contient les noms de champs et les informations de type de la structure, car ces informations doivent être connues lors de la désérialisation pour restaurer correctement la structure de données.

4. Convertir une séquence d'octets en structure

Afin de désérialiser une séquence d'octets en structure, nous pouvons utiliser la fonction "binary.Read". Voici un exemple :

package main

import (
  "bytes"
  "encoding/binary"
  "fmt"
)

type Person struct {
  Name   string
  Age    int
  Height float64
}

func main() {
  p := Person{"Tom", 20, 1.8}
  b := make([]byte, 0)

  binary.Write(&b, binary.LittleEndian, p)

  out := new(Person)
  buf := bytes.NewReader(b)
  binary.Read(buf, binary.LittleEndian, out)

  fmt.Printf("%+v", *out)
}

Dans cet exemple, nous sérialisons d'abord la structure Person en tranches d'octets en utilisant "binary.Write". Nous avons ensuite utilisé "bytes.NewReader" pour découper les octets dans un tampon. Enfin, nous utilisons la fonction "binary.Read" pour lire les données du tampon dans une nouvelle structure Person et afficher le résultat.

Dans ce cas, le résultat est :

{Name:"Tom", Age:20, Height:1.8}

Cela montre que nous avons réussi à désérialiser la séquence d'octets dans une structure Personne.

Résumé

Dans Golang, vous pouvez utiliser le package "encoding/binary" pour convertir les structures de données en séquences d'octets. Ceci est très utile car cela nous permet de transférer des données vers d'autres ordinateurs ou de les stocker dans des fichiers. Pour convertir une structure en séquence d'octets, on peut utiliser la fonction "binary.Write", et pour désérialiser une séquence d'octets en structure, on peut utiliser la fonction "binary.Read". Ces fonctions peuvent gérer différents types de données et prendre en charge différentes endianness.

J'espère que cet article sera utile pour convertir une structure en une séquence d'octets dans Golang.

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