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 :
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.
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
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
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 :
Par exemple :
type Student struct{
Name string Age int
}
func (s Student) tostring() string{
return fmt.Sprintf("Name: %s, Age: %d", s.Name, s.Age)
}
type Teacher struct{
Name string Age int
}
func (t Teacher) tostring ( ) string{
return fmt.Sprintf("Name: %s, Age: %d", t.Name, t.Age)
}
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())
}
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!