| 1 | func main() { |
| 2 | primeChan := primes() |
| 3 | for i := 0; i < 10; i++ { |
| 4 | fmt.Println(<-primeChan) |
| 5 | } |
| 6 | } |
prime.go
· 548 B · Go
原始文件
func primes() chan int {
ch := make(chan int)
go func() {
defer close(ch)
primes := []int{}
for i := 2; ; i++ {
isPrime := true
for _, p := range primes {
if p*p > i {
break
}
if i%p == 0 {
isPrime = false
break
}
}
if isPrime {
primes = append(primes, i)
ch <- i
}
}
}()
return ch
}
| 1 | func primes() chan int { |
| 2 | ch := make(chan int) |
| 3 | go func() { |
| 4 | defer close(ch) |
| 5 | primes := []int{} |
| 6 | for i := 2; ; i++ { |
| 7 | isPrime := true |
| 8 | for _, p := range primes { |
| 9 | if p*p > i { |
| 10 | break |
| 11 | } |
| 12 | if i%p == 0 { |
| 13 | isPrime = false |
| 14 | break |
| 15 | } |
| 16 | } |
| 17 | if isPrime { |
| 18 | primes = append(primes, i) |
| 19 | ch <- i |
| 20 | } |
| 21 | } |
| 22 | }() |
| 23 | return ch |
| 24 | } |
| 25 |