How to Elegantly Check Equality of Three Values in Go?

Susan Sarandon
Release: 2024-11-04 06:12:29
Original
372 people have browsed it

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>
Copy after login

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>
Copy after login

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>
Copy after login

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>
Copy after login

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>
Copy after login

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!

source:php.cn
Statement of this Website
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
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!