用Go的风格实现素数筛选
2017-07-21 12:03
281 查看
package main import ( "fmt" "time" ) const End = 10000 func source(ch chan<- int) { for i := 2; i < End; i++ { ch <- i } } func validate(in <-chan int, out chan<- int, fix int) { for { select { case i := <-in: if i%fix != 0 { out <- i } case <-time.After(1 * time.Second): close(out) return } } } // 打印素数 func main() { // 逐个获取待检测的数据源 ch := make(chan int) go source(ch) for { data, ok := <-ch if !ok { break } fmt.Println(data) out := make(chan int) go validate(ch, out, data) ch = out } }
参考:http://tonybai.com/2017/04/20/go-coding-in-go-way/ , 但他实现的没有关闭chan, 导致 fatal error: all goroutines are asleep - deadlock! ,本方法优化了这个BUG.
相关文章推荐
- Go语言实现的素数筛选程序
- 素数筛实现素数的快速筛选
- Go语言的素数对象编程实现及其使用
- 素数筛选法java实现
- Sieve of Eratosthenes(埃拉托斯特尼素数筛选法)--java实现
- 素数筛选实现
- Python使用集合实现素数筛选法
- 黑马程序员————java实现:筛选法求素数
- Go中的素数筛选
- JavaScript使用filter方法实现100以内素数的快速筛选
- C/C++编程小练习 计算10亿之内的素数和(合数筛选算法实现)
- 素数筛选法<单向链表实现>
- python实现素数筛选
- 一种实现筛选素数的方法
- 了解BitSet类并实现素数筛选--Eratosthenes筛选法
- 几种筛选求素数的实现
- Python用无限制数组实现求素数,不限制质数的个数,用筛选的方法!
- Go语言实现简单的一个静态WEB服务器
- Go实现FastCgi Proxy Client 系列(一)
- 《程序员密码学》之大数算数&Eratosthenes素数筛选