Eindeutige Kanäle in Go
In Go besteht eine häufige Anforderung darin, Kanäle zu erstellen, die nur unterschiedliche Werte ausgeben. Um dies zu erreichen, sind jedoch einige zusätzliche Überlegungen erforderlich.
Implementierung
Eine einfache Lösung besteht darin, eine Karte zum Speichern gefundener Werte zu verwenden. Hier ist eine einfache Implementierung:
<code class="go">func UniqueGen(min, max int) <-chan int { m := make(map[int]struct{}, max-min) ch := make(chan int) go func() { for i := 0; i < 1000; i++ { v := min + rand.Intn(max) if _, ok := m[v]; !ok { ch <- v m[v] = struct{}{} } } close(ch) }() return ch }</code>
Bedenken hinsichtlich Speicherlecks
Wenn man eine Karte verwendet, um sich zuvor gefundene Werte zu merken, kann man sich Sorgen über Speicherlecks machen. Bei dieser Implementierung ist die Karte jedoch auf den Bereich möglicher Werte (max. - min.) beschränkt und wird beim Schließen des Kanals gelöscht. Daher besteht kein Problem mit einem Speicherverlust.
Das obige ist der detaillierte Inhalt vonSo erstellen Sie unterschiedliche Kanäle in Go: Eine Anleitung zur Verhinderung von Speicherverlusten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!