| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- 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)
- }()
- }
|