今天在學習 Channel 用法時,影片 Concurrent Programming with Go 提到搭配 Channel 可以找出質數的方式。

範例程式碼

今天算是程式碼筆記的文章。 在範例程式裡,用了 2 的 Channel 來找出質數,要解釋下面的程式好像也不太好解釋,就請讀者仔細閱讀吧。

find prime number
  • go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package main

import (
"fmt"
)

func main() {
ch := make(chan int)
go generate(ch)
for {
prime := <- ch
fmt.Println(prime)
ch1 := make(chan int)
go filter(ch, ch1, prime)
ch = ch1
}
}

func generate (ch chan int) {
for i:=2; i < 100 ;i++{
ch <-i
}
}

func filter(in, out chan int, prime int){
for {
i := <-in

if i%prime != 0 {
out <- i
}
}
}
線上範例