Maison> développement back-end> Golang> le corps du texte

Comment comparer les valeurs des types personnalisés dans Golang ?

王林
Libérer: 2024-06-05 13:04:00
original
729 Les gens l'ont consulté

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.

在 Golang 中,如何比较自定义类型的值?

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 }
Copier après la connexion

使用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 }
Copier après la connexion

实战案例:比较用户结构体

让我们考虑一个实战案例,其中需要比较用户结构体。假设我们有一个User结构体,其中包含NameAgeEmail字段。

type User struct { Name string Age int Email string }
Copier après la connexion

现在,假设我们收到两个包含不同值的用户结构体实例。我们需要确定它们是否代表同一个人。我们可以使用reflect.DeepEqual函数来比较这些结构体:

func areUsersEqual(u1, u2 User) bool { return reflect.DeepEqual(u1, u2) }
Copier après la connexion

然后,我们可以使用areUsersEqual

Pour certains types personnalisés, leurs valeurs peuvent être facilement comparées via l'opérateur ==. 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.") }
Copier après la connexion
Utilisez la fonction reflect.DeepEqualPour 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.DeepEqualpour 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 Utilisateuravec les champs Nom, Âgeet 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.DeepEqualpour comparer ces structures : rrreee On peut ensuite utiliser la fonction areUsersEqualpour 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!

Étiquettes associées:
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
Derniers articles par auteur
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!