Canaux distinctifs dans Go
Dans Go, une exigence courante est de créer des canaux qui ne génèrent que des valeurs distinctes. Pour y parvenir, cependant, nécessite quelques considérations supplémentaires.
Mise en œuvre
Une solution simple consiste à utiliser une carte pour stocker les valeurs rencontrées. Voici une implémentation simple :
<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>
Problèmes de fuite de mémoire
Lors de l'utilisation d'une carte pour mémoriser des valeurs rencontrées précédemment, on peut s'inquiéter des fuites de mémoire. Cependant, dans cette implémentation, la carte est limitée à la plage de valeurs possibles (max - min) et est effacée à la fermeture du canal. Il n’y a donc aucun souci de fuite mémoire.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!