Home >Backend Development >Golang >How to Elegantly Check Equality of Three Values in Go?

How to Elegantly Check Equality of Three Values in Go?

Susan Sarandon
Susan SarandonOriginal
2024-11-04 06:12:29444browse

How to Elegantly Check Equality of Three Values in Go?

Alternatives to the Chained Comparison for Value Equality

When comparing three values for equality, using if a == b == c results in a compile error due to type mismatches. While if a == b && a == c is a valid alternative, it can appear cumbersome. This article explores several creative methods to elegantly check the equality of three values.

Option 1: Map as a Set

By creating a map with the three values as keys, we can check if all values are equal by verifying if the map's length is 1. This approach is flexible and can accommodate more than three values.

<code class="go">if len(map[interface{}]int{a: 0, b: 0, c: 0}) == 1 {
    fmt.Println("Map set: all 3 are equal")
}</code>

Option 2: Arrays

Arrays in Go are comparable, unlike slices. By comparing arrays with corresponding elements from the three values, we can check for equality.

<code class="go">if [2]interface{}{a, b} == [2]interface{}{b, c} {
    fmt.Println("Arrays: all 3 are equal")
}</code>

Option 3: Tricky Map

We can leverage a map's behavior to perform a single comparison of b == c and then access the resulting value for b as a proxy for the overall equality of the three values.

<code class="go">if map[interface{}]bool{a: b == c}[b] {
    fmt.Println("Tricky map: all 3 are equal")
}</code>

Option 4: Anonymous Structs

Struct values in Go are also comparable. We can create an anonymous struct with two fields, compare the structs containing the three values, and check for equality.

<code class="go">if struct{ a, b interface{} }{a, b} == struct{ a, b interface{} }{b, c} {
    fmt.Println("Anon structs: all 3 are equal")
}</code>

Option 5: Helper Function

We can define a helper function to check the equality of an arbitrary number of values by iteratively comparing them to a seed value.

<code class="go">func AllEquals(v ...interface{}) bool {
    if len(v) > 1 {
        a := v[0]
        for _, s := range v {
            if a != s {
                return false
            }
        }
    }
    return true
}</code>

The above is the detailed content of How to Elegantly Check Equality of Three Values in Go?. 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