A set API is only useful once “the same element” has a precise meaning. Go’s collection proposals expose that choice rather than forcing every key through built-in equality.

What is proposed and what is already released
The open collection umbrella #80590 targets Go1.28 and links sets, custom-hash collections, ordered maps and a generic heap. It is not a release guarantee for every package. Its map-backed set preserves familiar built-in operations; the draft insertion method is named Insert, not Add.
Go 1.27 already includes maphash.Hasher. The package documentation couples hashing with an equality relation: values considered equal must hash consistently for the same seed.
A case-insensitive key needs two matching decisions
Consider an application restricted to ASCII account identifiers that deliberately treats “ALICE” and “alice” as equal. If its equality function ignores case but its hash consumes the original bytes, equal keys can be sent to different buckets. A lookup may miss the entry it ought to find.
Our diagram normalizes both inputs to the same canonical bytes before hashing and comparison. This is a conceptual example, not production Unicode normalization code. An application accepting international identifiers must choose its normalization and equivalence rules explicitly instead of generalizing an ASCII illustration.
Hash collisions are different: two unequal values can share a hash, so the equality check must still distinguish them. A hash is an indexing aid, not proof of identity.
Choose the collection around the operation
For simple membership with comparable keys, an ordinary map-backed set can remain sufficient. For range queries or ordered traversal, examine an ordered structure. For custom equivalence or non-comparable keys, evaluate the hash-based proposals and the cost of the hasher itself.
Keep proposed APIs out of a production migration plan until their individual status and the actual toolchain are clear. The useful preparation is to inventory required operations and equality semantics; renaming a local wrapper to match a moving draft does not establish a performance or maintenance benefit.
September 8: distinguish the open Go1.28 umbrella from released 1.27 Hasher; correct insertion terminology and explain the equality/hash invariant.