package main import ( "fmt" "time" ) func main() { go testRemoveDuplicates() time.Sleep(1 * time.Second) /* channel := make(chan int) go task(channel, 7) fmt.Println(<-channel) */ /* channel := make(chan string, 5) var testString string = "hello" go task2(channel, testString) */ } func channelTest1() { // time.Sleep(1 * time.Second) // channel := make(chan int) // отправка данных в канал // channel <- num // получение данных из канала // num = <- channel // чтение данных из канала может происходить в цикле // Цикл будет продолжаться до тех пор пока канал не будет закрыт. /* for v := range channel { // обработка данных } */ // close(channel) // c := make(chan int, 1) // Канал с буфером размера 1 // fmt.Println(len(c), cap(c)) // 0 1 // c <- 1 // fmt.Println(len(c), cap(c)) // 1 1 // <-c // pipe := make(chan int) // Небуферизованный канал // pipe := make(chan int, 0) // Небуферизованый канал с ёмкостью 0 // pipe := make(chan int, 5) // Буферизованный канал с ёикостью 5 // channel := make(chan string, 3) // Канал с буфером на 3 строки // channel <- "A" // fmt.Println(<-channel) // Извлекаем элемент из канала } func channelTest2() { c := make(chan int, 5) for i := 0; i < 5; i++ { go myFunc(c) } time.Sleep(1 * time.Second) // fmt.Println("adafsdf") fmt.Print(<-c) } func myFunc(c chan int) { c <- cap(c) // fmt.Println(cap(c)) } func task(c chan int, n int) { c <- n + 1 } func task2(c chan string, s string) { for i := 0; i < 5; i++ { c <- s + " " } } func testRemoveDuplicates() { inputStream := make(chan string, 5) outputStream := make(chan string, 5) go removeDuplicates(inputStream, outputStream) inputStream <- "a" inputStream <- "a" inputStream <- "b" inputStream <- "a" inputStream <- "c" close(inputStream) fmt.Println(<-outputStream) fmt.Println(<-outputStream) } func removeDuplicates(inputStream chan string, outputStream chan string) { var oldString string for value := range inputStream { if oldString != value { outputStream <- value oldString = value } } defer func() { close(outputStream) }() }