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
790 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.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 : 🎜rrreee🎜🎜Exemple pratique : comparaison des structures utilisateur🎜🎜🎜Considé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. 🎜rrreee🎜Maintenant, 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!

É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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal