Go

Generic Set Type

admin by @admin ADMIN
5d ago
May 31, 2026
Public
0 0 up · 0 down Sign in to vote
A type-safe Set built on `map[T]struct{}` and Go generics. Has Add / Has / Delete / Size — and uses zero bytes per entry for the value side.
Go
Raw
package main

import "fmt"

type Set[T comparable] map[T]struct{}

func New[T comparable](items ...T) Set[T] {
    s := make(Set[T], len(items))
    for _, v := range items {
        s[v] = struct{}{}
    }
    return s
}

func (s Set[T]) Add(v T)            { s[v] = struct{}{} }
func (s Set[T]) Delete(v T)         { delete(s, v) }
func (s Set[T]) Has(v T) bool       { _, ok := s[v]; return ok }
func (s Set[T]) Size() int          { return len(s) }
func (s Set[T]) Slice() []T {
    out := make([]T, 0, len(s))
    for k := range s { out = append(out, k) }
    return out
}

func main() {
    s := New("a", "b", "c", "a")
    fmt.Println(s.Size())                                // 3
    fmt.Println(s.Has("b"))                              // true
    s.Add("d")
    s.Delete("a")
    fmt.Println(s.Slice())                               // [b c d] (order varies)
}
Tags

Save your own code snippets

Create a free account and build your private vault. Share publicly whenever you want.