From 051aa42b193871e2507b6016f3dea11a4ce8a42b Mon Sep 17 00:00:00 2001 From: ookura keisuke Date: Sat, 25 Apr 2020 14:16:24 +0900 Subject: [PATCH 1/3] =?UTF-8?q?=E8=AA=B2=E9=A1=8C1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- channel/task/basic/main.go | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/channel/task/basic/main.go b/channel/task/basic/main.go index 3998516..0c91e10 100644 --- a/channel/task/basic/main.go +++ b/channel/task/basic/main.go @@ -1,6 +1,28 @@ package main -// channel/basicのInt版 +import ( + "fmt" + "math/rand" + "time" +) + // Goroutine内で好きなIntをchannelを経由でMain Goroutineに渡し標準出力にPrintしてみる。 func main() { + ch := make(chan int) + + go func() { + defer close(ch) + + rand.Seed(time.Now().Unix()) + max := rand.Intn(10) + + for i := 0; i < max; i++ { + time.Sleep(1 * time.Second) + ch <- rand.Intn(100) + } + }() + + for v := range ch { + fmt.Printf("revieved: %d\n", v) + } } From b78b1be43c496bc174d35ba077c595cd33c44753 Mon Sep 17 00:00:00 2001 From: ookura keisuke Date: Sat, 25 Apr 2020 14:51:05 +0900 Subject: [PATCH 2/3] =?UTF-8?q?=E8=AA=B2=E9=A1=8C2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- channel/task/sleep_sort/main.go | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/channel/task/sleep_sort/main.go b/channel/task/sleep_sort/main.go index da29a2c..60a46f9 100644 --- a/channel/task/sleep_sort/main.go +++ b/channel/task/sleep_sort/main.go @@ -1,4 +1,35 @@ package main +import ( + "fmt" + "time" +) + func main() { + nums := []int{1, 3, 2, 5, 4} + + sortedNumbersChan := sortedNumbersChan(nums) + + for n := range sortedNumbersChan { + fmt.Println(n) + } +} + +func sortedNumbersChan(nums []int) <-chan int { + ch := make(chan int) + + for _, num := range nums { + isLast := num == len(nums) + + go func(n int, isLast bool) { + if isLast { + defer close(ch) + } + + time.Sleep(time.Duration(n) * time.Second) + ch <- n + }(num, isLast) + } + + return ch } From 9c2542c9ba8b4bf227d2294fdc363bb6d3bcf9d4 Mon Sep 17 00:00:00 2001 From: ookura keisuke Date: Sat, 25 Apr 2020 15:33:25 +0900 Subject: [PATCH 3/3] =?UTF-8?q?=E8=AA=B2=E9=A1=8C3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- channel/task/ticker/main.go | 39 +++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/channel/task/ticker/main.go b/channel/task/ticker/main.go index da29a2c..f51fc05 100644 --- a/channel/task/ticker/main.go +++ b/channel/task/ticker/main.go @@ -1,4 +1,43 @@ package main +import ( + "fmt" + "time" +) + func main() { + fmt.Println("+++++ Metronome is start +++++") + + bpm := 120 + + // metronomeCh := metronomeChan(120) + doneCh := make(chan interface{}) + + waitSpan := time.Duration(60 * 1000 / bpm) + flag := 0 + ticker := time.NewTicker(waitSpan * time.Millisecond) + defer ticker.Stop() + + go func() { + time.Sleep(5 * time.Second) + doneCh <- "5 second timeout" + }() + +loop: + for { + select { + case <-ticker.C: + if flag == 0 { + fmt.Println("tic") + flag = 1 + } else { + fmt.Println("tac") + flag = 0 + } + case v := <-doneCh: + fmt.Println(v) + break loop + } + } + fmt.Println("+++++ Metronome is end +++++") }