Dans Golang, les valeurs des types personnalisés peuvent être comparées en utilisant directement l'opérateur == pour les types avec la même représentation sous-jacente. Pour les types plus complexes, utilisez la fonction reflex.DeepEqual pour comparer de manière récursive l’intégralité du contenu de deux valeurs.
Comparez les valeurs de types personnalisés dans Golang
Dans Golang, les types personnalisés sont des types de données définis par l'utilisateur qui peuvent être créés selon les besoins dans le programme. Lorsque vous travaillez avec des valeurs de types personnalisés, vous devez parfois les comparer pour vérifier leur égalité ou déterminer si elles sont égales. Cet article présentera comment comparer les valeurs des types personnalisés dans Golang et un cas pratique.
Utilisez l'opérateur==
==
操作符
对于某些自定义类型,可以通过==
操作符方便地比较它们的值。当两个类型具有相同的底层表示形式时,可以使用==
操作符。例如,以下是如何比较两个int
类型的值:
package main import "fmt" type MyInt int func main() { var a MyInt = 10 var b MyInt = 10 fmt.Println(a == b) // true }
使用reflect.DeepEqual
函数
对于更复杂的自定义类型,不能直接使用==
操作符进行比较。在这种情况下,可以使用reflect.DeepEqual
函数,该函数通过递归比较两个值的全部内容来确定它们是否相等。以下是如何使用reflect.DeepEqual
函数比较两个struct
类型的值:
package main import "fmt" import "reflect" type MyStruct struct { Name string Age int } func main() { var a = MyStruct{Name: "Alice", Age: 25} var b = MyStruct{Name: "Alice", Age: 25} fmt.Println(reflect.DeepEqual(a, b)) // true }
实战案例:比较用户结构体
让我们考虑一个实战案例,其中需要比较用户结构体。假设我们有一个User
结构体,其中包含Name
、Age
和Email
字段。
type User struct { Name string Age int Email string }
现在,假设我们收到两个包含不同值的用户结构体实例。我们需要确定它们是否代表同一个人。我们可以使用reflect.DeepEqual
函数来比较这些结构体:
func areUsersEqual(u1, u2 User) bool { return reflect.DeepEqual(u1, u2) }
然后,我们可以使用areUsersEqual
==
. L'opérateur
==
peut être utilisé lorsque deux types ont la même représentation sous-jacente. Par exemple, voici comment comparer deux valeurs de type
int
:
func main() { u1 := User{Name: "John", Age: 30, Email: "john@example.com"} u2 := User{Name: "John", Age: 30, Email: "john@example.com"} if areUsersEqual(u1, u2) { fmt.Println("Users are equal.") } else { fmt.Println("Users are not equal.") }
reflect.DeepEqual
Pour les types personnalisés plus complexes, elle ne peut pas être utilisé directement avec l'opérateur
==
pour la comparaison. Dans ce cas, vous pouvez utiliser la fonction
reflect.DeepEqual
, qui détermine si deux valeurs sont égales en comparant récursivement l'intégralité de leur contenu. Voici comment utiliser la fonction
reflect.DeepEqual
pour comparer les valeurs de deux types
struct
: rrreeeExemple pratique : comparaison des structures utilisateurConsidérons un exemple pratique case , qui doit comparer les structures des utilisateurs. Supposons que nous ayons une structure
Utilisateur
avec les champs
Nom
,
Âge
et
E-mail
. rrreeeMaintenant, disons que nous recevons deux instances de structure User contenant des valeurs différentes. Nous devons déterminer s’ils représentent la même personne. On peut utiliser la fonction
reflect.DeepEqual
pour comparer ces structures : rrreee On peut ensuite utiliser la fonction
areUsersEqual
pour déterminer si les utilisateurs sont égaux : rrreee
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!