Home >Backend Development >Golang >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!