Verwendung: 1. Wenn Sie die Karte als Set verwenden, können Sie den Werttyp als leere Struktur definieren, die nur als Platzhalter verwendet wird. Der Kanal muss keine Daten senden, kann aber verwendet werden, wenn er nur verwendet wird um Sub-Coroutinen zur Ausführung von Aufgaben usw. zu benachrichtigen. Die leere Struktur wird als Platzhalter verwendet. 3. Wenn die Struktur nur Methoden und keine Felder enthält, kann eine leere Struktur deklariert werden, um Ressourcen zu sparen.
Die Betriebsumgebung dieses Tutorials: Windows 10-System, GO 1.11.2, Dell G3-Computer.
package main import ( "fmt" "unsafe" ) func main() { fmt.Println(unsafe.Sizeof(struct{}{})) }
$ go run main.go 0
2. Die Rolle leerer Strukturen
2.1 Set implementieren
Die Standardbibliothek der Go-Sprache stellt keine Implementierung von Set bereit, und stattdessen wird normalerweise Map verwendet. Tatsächlich werden für Sammlungen nur die Schlüssel der Karte benötigt, nicht die Werte. Selbst wenn der Wert auf den Typ Bool festgelegt ist, belegt er 1 Byte mehr. Wenn die Karte eine Million Daten enthält, wird 1 MB Speicherplatz verschwendet.
Wenn Sie also Map als Set verwenden, können Sie den Werttyp als leere Struktur definieren und ihn nur als Platzhalter verwenden. 2.2 Kanal, der keine Daten sendet In diesem Fall bietet sich die Verwendung einer leeren Struktur als Platzhalter sehr gut an.2.3 Struktur, die nur Methoden enthält
type Set map[string]struct{} func (s Set) Has(key string) bool { _, ok := s[key] return ok } func (s Set) Add(key string) { s[key] = struct{}{} } func (s Set) Delete(key string) { delete(s, key) } func main() { s := make(Set) s.Add("Tom") s.Add("Sam") fmt.Println(s.Has("Tom")) fmt.Println(s.Has("Jack")) }
func worker(ch chan struct{}) { <-ch fmt.Println("do something") close(ch) } func main() { ch := make(chan struct{}) go worker(ch) ch <- struct{}{} }
Golang-Tutorial
Das obige ist der detaillierte Inhalt vonWozu dient eine leere Struktur in der Go-Sprache?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!