Maison > développement back-end > Golang > Discutez du concept de coercition de type dans Golang

Discutez du concept de coercition de type dans Golang

PHPz
Libérer: 2023-04-21 14:55:37
original
696 Les gens l'ont consulté

Golang est un langage de programmation à type forcé, ce qui signifie que le même type de données doit être utilisé lors de l'affectation de variables ou du passage de paramètres. Cependant, il existe des situations dans lesquelles nous devons convertir un type de données en un autre. Cela nécessite un casting de type.

Cet article discutera du concept, de l'utilisation et des précautions de la coercition de type dans Golang.

Concept de conversion de type

La conversion de type consiste à convertir la valeur d'un type de données en la valeur d'un autre type de données, ce qui se produit généralement dans les situations suivantes :

  1. Incompatibilité de type d'expression.
  2. Attribuez des valeurs entre des variables de différents types.
  3. Lors du passage de paramètres entre fonctions.

Dans Golang, la conversion de type peut être utilisée pour convertir un type de données de base en un autre, ou elle peut être utilisée pour convertir un type personnalisé en un autre type personnalisé.

Conversion de type de données de base

Dans Golang, plusieurs types de données de base peuvent être convertis. Ceux-ci incluent : entier, virgule flottante et booléen.

  1. Conversion entière

peut convertir un type entier en un autre type entier. Si le type de données d'origine est supérieur au type cible, une troncature se produit. Si le type de données d'origine est plus petit que le type cible, une expansion se produit.

Par exemple :

var a int32 = 100
var b int64
b = int64(a)
fmt.Printf("%T, %vn", b, b)

Le résultat de sortie est :

int64 , 100

  1. Conversion à virgule flottante

peut convertir un type à virgule flottante en un autre type à virgule flottante. Si le type de données d'origine est différent du type cible, une perte de précision se produira.

Par exemple :

var a float32 = 10.5
var b float64
b = float64(a)
fmt.Printf("%T, %vn", b, b)

Le résultat de sortie est :

float64 , 10.5

  1. Conversion booléenne

peut convertir une valeur booléenne en un type entier ou un type chaîne. Convertissez vrai en 1 et faux en 0.

Par exemple :

var a bool = true
var b int
b = int(a)
fmt.Printf("%T, %vn", b, b)

Le résultat de sortie est :

int , 1

Conversion de type personnalisé

Dans Golang, la conversion entre les types personnalisés doit être effectuée explicitement. Si vous souhaitez convertir un type personnalisé en un autre, vous devez implémenter les deux méthodes suivantes :

  1. Méthode pour convertir le type d'origine en type cible.
  2. Méthode pour reconvertir le type cible en type d'origine.

Par exemple :

type Student struct{

Name string
Age int
Copier après la connexion
Copier après la connexion

}

func (s Student) tostring() string{

return fmt.Sprintf("Name: %s, Age: %d", s.Name, s.Age)
Copier après la connexion

}

type Teacher struct{

Name string
Age int
Copier après la connexion
Copier après la connexion

}

func (t Teacher) tostring ( ) string{

return fmt.Sprintf("Name: %s, Age: %d", t.Name, t.Age)
Copier après la connexion

}

func main() {

s := Student{Name: "小明", Age: 18}
t := Teacher(s) // 将Student类型转换为Teacher类型
fmt.Println(t.tostring())

s2 := Student(t) // 将Teacher类型转换为Student类型
fmt.Println(s2.tostring())
Copier après la connexion

}

Le résultat de sortie est :

Nom : Xiao Ming, Âge : 18

Nom : , Âge : 0

Remarque : avant d'ajouter le type personnalisé Lors de la conversion vers un autre type, vous devez vous assurer que les deux types ont les mêmes champs et méthodes.

Assertion de type

En plus de la conversion de type, Golang fournit également une assertion de type pour obtenir le type réel de la valeur dans l'interface. Dans Golang, l'interface est un concept très important car elle peut fournir un mécanisme de conversion de type universel. Lorsque nous devons obtenir une valeur d’une interface, nous devons utiliser des assertions de type.

Par exemple :

var x interface{} = 1
i, ok := x.(int)
fmt.Println(i, ok)

Le résultat de sortie est :

1 true

Si l'interface la valeur x contient une valeur de type int, alors la variable i contiendra la valeur et la variable ok sera vraie. Si la valeur d'interface x ne contient pas de valeur de type int, la variable i contiendra la valeur par défaut 0 et la variable ok sera fausse.

Remarque : pour les types d'interface qui ne peuvent pas être affirmés, les assertions de type paniqueront. Par conséquent, avant de faire des assertions de type, vous devez utiliser le jugement de type pour vérifier le type réel de l'interface.

Résumé

Golang fournit un mécanisme simple et efficace pour la coercition des types de données. Dans tous les cas, il faut être prudent lors de la conversion des types de données car cela peut entraîner une perte de précision ou une troncature. Lors de la conversion d'un type personnalisé en un autre type, vous devez vous assurer que les deux types ont les mêmes champs et méthodes, et vous devez implémenter explicitement la méthode de conversion. Les assertions de type sont des méthodes permettant d'obtenir le type réel à partir de l'interface. En résumé, une conversion de type de données et une assertion de type appropriées peuvent grandement aider les programmeurs Golang à améliorer l'efficacité et la lisibilité de leur code.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal