go / intermediate
Snippet
Erstellen von benutzerdefinierten Sets mit leeren Struct-Maps
Da Go keine integrierte Set-Sammlung anbietet, implementieren Entwickler diese mithilfe einer Map. Durch die Verwendung von struct{} als Werttyp verbrauchen wir 0 Byte Speicherplatz für die Werte, was es sehr speichereffizient macht.
snippet.go
go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package mainimport "fmt"type Set struct {data map[string]struct{}}func NewSet() *Set {return &Set{data: make(map[string]struct{})}}func (s *Set) Add(item string) {s.data[item] = struct{}{}}func (s *Set) Has(item string) bool {_, exists := s.data[item]return exists}func main() {s := NewSet()s.Add("golang")fmt.Println("Contains golang:", s.Has("golang"))}
Erklärung
1
data map[string]struct{}
Verwendet Map-Schlüssel für Set-Elemente und ein leeres Struct als 0-Byte-Wert.
2
s.data[item] = struct{}{}
Fügt ein Element zur Map hinzu und nutzt struct{}{}, um keinen Speicher für den Map-Wert zu verbrauchen.
3
_, exists := s.data[item]
Prüft die Mitgliedschaft des Schlüssels in der Map mittels Comma-Ok-Idiom.