Heim >Backend-Entwicklung >Golang >Wozu dient eine leere Struktur in der Go-Sprache?
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 0Mit anderen Worten, die leere Strukturinstanz struct{} belegt keinen Speicherplatz.
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")) }In einigen Szenarien enthält die Struktur nur Methoden und keine Felder. Zum Beispiel Door im obigen Beispiel. In diesem Fall kann Door tatsächlich durch eine beliebige Datenstruktur ersetzt werden. Zum Beispiel:
func worker(ch chan struct{}) { <-ch fmt.Println("do something") close(ch) } func main() { ch := make(chan struct{}) go worker(ch) ch <- struct{}{} }Ob es sich um int oder bool handelt, es wird zusätzlicher Speicher verschwendet. Daher ist es in diesem Fall am besten, eine leere Struktur zu deklarieren. Empfohlenes Lernen:
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!