Constraints
Let us say that you have a function that works with generics that multiplies two numeric values. Should this function work with all data types? Can this function work with all data types? Can you multiply two strings or two structures? The solution for avoiding that kind of issue is the use of constraints.
Forget about multiplication for a while and think about something simpler. Let us say that we want to compare variables for equality—is there a way to tell Go that we only want to work with values that can be compared? Go 1.18 is going to come with predefined constraints—one of them is called comparable
and includes data types that can be compared for equality or inequality.
The code of allowed.go
illustrates the use of the comparable
constraint:
package main
import (
"fmt"
)
func Same[T comparable](a, b T) bool {
if a == b {
return true
}
return false
}
The Same()
function uses the predefined comparable...