Advertisement
Guest User

Untitled

a guest
Jan 21st, 2019
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 0.82 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "log"
  5.     "math/rand"
  6.     "strconv"
  7. )
  8.  
  9. func worker(input <-chan string, output chan<- string) {
  10.     defer close(output)
  11.  
  12.     bufer := make(map[string]bool)
  13.  
  14.     for data := range input {
  15.         if data == ":reset" {
  16.             bufer = make(map[string]struct{})
  17.         }
  18.  
  19.         if _, has := bufer[data]; has {
  20.             continue
  21.         }
  22.  
  23.         bufer[data] = true
  24.  
  25.         output <- data
  26.     }
  27. }
  28.  
  29. func reader(data <-chan string, done chan<- struct{}) {
  30.     defer close(done)
  31.  
  32.     for row := range data {
  33.         log.Println("received", row)
  34.     }
  35. }
  36.  
  37. func main() {
  38.     input := make(chan string)
  39.     output := make(chan string)
  40.  
  41.     go worker(input, output)
  42.  
  43.     done := make(chan struct{})
  44.     go reader(output, done)
  45.  
  46.     for i := 0; i < 10; i++ {
  47.         data := strconv.Itoa(rand.Intn(10))
  48.         log.Println("sent", data)
  49.  
  50.         input <- data
  51.     }
  52.     close(input)
  53.  
  54.     <-done
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement