Dmitry Telenkov il y a 1 semaine
Parent
commit
663f7e04bb
1 fichiers modifiés avec 121 ajouts et 0 suppressions
  1. 121 0
      go/stepik/3/channel.go

+ 121 - 0
go/stepik/3/channel.go

@@ -0,0 +1,121 @@
+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)
+	}()
+}