mirror of
				https://github.com/golang/go.git
				synced 2025-11-01 01:00:56 +00:00 
			
		
		
		
	
		
			
	
	
		
			37 lines
		
	
	
	
		
			905 B
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			37 lines
		
	
	
	
		
			905 B
		
	
	
	
		
			Go
		
	
	
	
	
	
|   | // Copyright 2009 The Go Authors. All rights reserved. | ||
|  | // Use of this source code is governed by a BSD-style | ||
|  | // license that can be found in the LICENSE file. | ||
|  | 
 | ||
|  | package main | ||
|  | 
 | ||
|  | // Send the sequence 2, 3, 4, ... to channel 'ch'. | ||
|  | func Generate(ch *chan int) { | ||
|  | 	for i := 2; ; i++ { | ||
|  | 		ch -< i  // Send 'i' to channel 'ch'. | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | // Copy the values from channel 'in' to channel 'out', | ||
|  | // removing those divisible by 'prime'. | ||
|  | func Filter(in *chan int, out *chan int, prime int) { | ||
|  | 	for { | ||
|  | 		i := <-in  // Receive value of new variable 'i' from 'in'. | ||
|  | 		if i % prime != 0 { | ||
|  | 			out -< i  // Send 'i' to channel 'out'. | ||
|  | 		} | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | // The prime sieve: Daisy-chain Filter processes together. | ||
|  | func main() { | ||
|  | 	ch := new(chan int);  // Create a new channel. | ||
|  | 	go Generate(ch);  // Start Generate() as a goroutine. | ||
|  | 	for { | ||
|  | 		prime := <-ch; | ||
|  | 		print(prime, "\n"); | ||
|  | 		ch1 := new(chan int); | ||
|  | 		go Filter(ch, ch1, prime); | ||
|  | 		ch = ch1 | ||
|  | 	} | ||
|  | } |