Home  >  Article  >  Backend Development  >  How to compare values ​​of custom types in Golang?

How to compare values ​​of custom types in Golang?

王林
王林Original
2024-06-05 13:04:00786browse

In Golang, values ​​of custom types can be compared in the following way: For types with the same underlying representation, use the == operator directly for comparison. For more complex types, use the reflect.DeepEqual function to recursively compare the entire contents of two values.

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

Comparing values ​​of custom types in Golang

In Golang, custom types are user-defined data types. Can be created in the program as needed. When you work with values ​​of custom types, you sometimes need to compare them for equality or to determine whether they are equal. This article will introduce how to compare values ​​of custom types in Golang and a practical case.

Use the == operator

For some custom types, you can conveniently use the == operator Compare their values. The == operator can be used when two types have the same underlying representation. For example, here's how to compare two values ​​of type int:

package main

import "fmt"

type MyInt int

func main() {
    var a MyInt = 10
    var b MyInt = 10
    fmt.Println(a == b) // true
}

Use the reflect.DeepEqual function

For More complex custom types cannot be compared directly using the == operator. In this case, you can use the reflect.DeepEqual function, which determines whether two values ​​are equal by recursively comparing their entire contents. The following is how to use the reflect.DeepEqual function to compare two struct type values:

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
}

Practical case: Comparing user structures

Let us consider a practical case where user structures need to be compared. Suppose we have a User structure with Name, Age, and Email fields.

type User struct {
    Name   string
    Age    int
    Email  string
}

Now, suppose we receive two User struct instances containing different values. We need to determine if they represent the same person. We can use the reflect.DeepEqual function to compare these structures:

func areUsersEqual(u1, u2 User) bool {
    return reflect.DeepEqual(u1, u2)
}

We can then use the areUsersEqual function to determine if users are equal:

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.")
    }

The above is the detailed content of How to compare values ​​of custom types in Golang?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn