Maison  >  Article  >  développement back-end  >  Compréhension approfondie de la conversion de types de données en langage Go

Compréhension approfondie de la conversion de types de données en langage Go

PHPz
PHPzoriginal
2023-03-30 09:05:31934parcourir

Dans la programmation quotidienne, la conversion de types de données est une opération essentielle, et le langage Golang fournit également un puissant mécanisme de conversion de types de données. Dans cet article, nous examinerons en profondeur la conversion de types de données en langage Go et certains scénarios d'utilisation courants.

1. Concepts de base de la conversion de type

Dans Golang, les types de données sont divisés en deux types : les types de base et les types composites. Parmi eux, les types de base incluent les entiers, les types à virgule flottante, les types booléens, les types de chaînes, les types de caractères, etc. ; les types composites incluent les tableaux, les tranches, les cartes, les structures, etc. Lors de la conversion de type, nous devons convertir une valeur d'un certain type en une valeur d'un autre type. La conversion entre les types de base est relativement simple, tandis que la conversion de types composites nécessite plus de traitement.

TYPES est l'un des types intégrés dans Golang, qui représente le type lui-même. Dans Golang, la conversion de type consiste à changer la valeur d'un type en la valeur d'un autre type. Ceci peut être réalisé avec un opérateur de conversion de type tel que T(x), où T représente le type cible et x représente la valeur à convertir.

Par exemple, la syntaxe pour convertir une chaîne en entier est la suivante :

s := "123"
i, err := strconv.Atoi(s)

Dans le code ci-dessus, la fonction strconv.Atoi() convertit la valeur s de type chaîne en valeur i de type entier. De plus, cette fonction vérifiera également si le format de s est conforme à la spécification entière pendant le processus de conversion. S'il n'est pas conforme, une erreur sera renvoyée. Cela nous oblige à traiter les messages d'erreur avec soin lors de l'exécution d'opérations de conversion de type.

2. Conversion entre types de base

  1. Conversion entre types entiers

Dans Golang, les types entiers incluent les entiers signés (int, int8, int16, int32, int64) et les entiers non signés (uint, uint8, uint16, uint32, uint64). ). Lors d'une conversion entre entiers, si le nombre de bits du type source est inférieur ou égal au nombre de bits du type cible, la conversion peut être effectuée directement. Par exemple, convertir une valeur de type int32 en une valeur de type int16 :

var i int32 = 100
var j int16 = int16(i)

Si le nombre de bits du type source est supérieur au nombre de bits du type cible, vous devez décider comment effectuer la conversion en fonction sur des besoins métiers spécifiques. Généralement, nous pouvons tronquer ou modulo la valeur source pour réaliser la conversion.

var i int32 = 10000
var j int16 = int16(i % (1 << 16))
  1. Conversion entre types à virgule flottante

Lors de la conversion entre types à virgule flottante, vous devez tenir compte de la précision des nombres à virgule flottante. Habituellement, la précision des nombres à virgule flottante est perdue pendant le processus de conversion de type, nous devons donc choisir la méthode de conversion de manière raisonnable.

Par exemple, convertissez une valeur de type float64 en valeur de type float32 :

var f1 float64 = 1.23456
var f2 float32 = float32(f1)

Lors de la conversion de type de nombres à virgule flottante, nous devons prêter attention à la question de la conservation du nombre de chiffres et de la précision, ce qui est d'une grande importance pour les applications d'ingénierie.

  1. Conversion entre les types booléens et chaînes

Dans Golang, vous pouvez convertir une valeur booléenne en type chaîne ou une valeur de type chaîne en type booléen. Lors de l'exécution de ce type de conversion, nous pouvons utiliser directement les outils fournis par le langage :

var b bool = true
var s string = strconv.FormatBool(b)
var b2 bool = strconv.ParseBool(s)

La fonction ParseBool() peut analyser les valeurs de type chaîne en valeurs booléennes correspondantes.

3. Conversion entre types composites

  1. Conversion entre tableaux et tranches

Dans Golang, nous pouvons convertir les valeurs de type tableau en valeurs de type tranche, mais l'inverse n'est pas possible. En effet, un type slice est essentiellement un pointeur vers un tableau, donc un type slice peut être utilisé à la place d'un type tableau. Lors de la conversion entre tableaux et tranches, nous pouvons utiliser directement les outils fournis par le langage Go :

a := [3]int{1, 2, 3}
s := a[:]

Dans le code ci-dessus, nous convertissons le tableau a en une valeur de type tranche s. Notez que cette conversion ne crée pas de nouvelles données, elle modifie simplement la référence aux données.

  1. Conversion entre mapping et structure

Dans Golang, nous pouvons convertir la valeur du type structure en valeur du type mapping, mais l'inverse n'est pas possible. En effet, un type de carte est essentiellement un ensemble de paires clé-valeur, tandis qu'un type de structure est un ensemble ordonné de types de données.

Lors de la conversion entre mappage et structure, nous devons faire attention à la correspondance entre les éléments entre le type de mappage et le type de structure. Normalement, nous pouvons utiliser le package json intégré dans Golang pour la conversion.

type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}
p := Person{"Tom", 18}
m, err := json.Marshal(p) // 结构体 => 映射
var p2 Person
err := json.Unmarshal(m, &p2) // 映射 => 结构体

Dans le code ci-dessus, nous convertissons une valeur p d'un type de structure en une valeur m d'un type de mappage, puis convertissons la valeur m de ce type de mappage en une valeur p2 d'un autre type de structure.

4. Résumé

Dans la programmation quotidienne, nous devons effectuer fréquemment des opérations de conversion de types de données, et le langage Golang fournit un mécanisme de conversion de type riche. Lors de la conversion de type, nous devons prêter attention à la différence entre le type source et le type cible, ainsi qu'à la manière de gérer le nombre de bits et les problèmes de précision. Lors de la conversion de types composites, nous devons également faire attention à la correspondance entre les éléments.

Avec une compréhension approfondie du mécanisme de conversion de type, nous pouvons utiliser le langage Golang pour programmer de manière plus flexible et gérer plus efficacement les opérations de type de données courantes.

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