A union interface defines a generic constraint by listing the types a function may accept. This lets constrained code use operations supported by every listed type. section 7.1.1
Exact versus underlying types
A constraint such as int | int32 | int64 accepts only those three types. Replacing each type with ~int, ~int32, or ~int64 also accepts named types whose underlying types match, such as type age int. section 7.1.1
type summable interface {
int | int32 | int64
}
Use this declaration as the starting point for a constraint that permits several integer types. section 7.1.1
type summable interface {
~int | ~int32 | ~int64
}
Use the tilde form when named types with matching underlying integer types must also be accepted. section 7.1.1

