| 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 |