struct{} - пустая структура, размер которой равен 0 байт. Это делает map[K]struct{} идеальным для множества:
// Множество строк
seen := make(map[string]struct{})
// Добавление
seen["alice"] = struct{}{}
// Проверка принадлежности
if _, ok := seen["alice"]; ok {
fmt.Println("exists")
}
// Удаление
delete(seen, "alice")
Сравнение с map[string]bool:
struct{} - 0 байт на значение, bool - 1 байтstruct{} явно выражает семантику: "нас интересует только наличие ключа"bool может быть удобнее: if seen["alice"] (не нужна запятая-ok)На практике для небольших множеств разницы нет; для больших - struct{} предпочтительнее. Также chan struct{} используется для сигнальных каналов.