git-subtree-dir: users/wpcarro git-subtree-mainline:464bbcb15cgit-subtree-split:24f5a642afChange-Id: I6105b3762b79126b3488359c95978cadb3efa789
		
			
				
	
	
		
			45 lines
		
	
	
	
		
			780 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
	
		
			780 B
		
	
	
	
		
			Go
		
	
	
	
	
	
package main
 | 
						|
 | 
						|
import (
 | 
						|
	"bufio"
 | 
						|
	"fmt"
 | 
						|
	"os"
 | 
						|
)
 | 
						|
 | 
						|
// Call function `f` in a go-routine, passing a reference to a newly created
 | 
						|
// channel, `c`, as its only argument. Return a reference to `c` to the caller
 | 
						|
// of `act`. When `f` halts, close the channel.
 | 
						|
func act(f func(chan interface{})) chan interface{} {
 | 
						|
	c := make(chan interface{})
 | 
						|
 | 
						|
	go func() {
 | 
						|
		defer close(c)
 | 
						|
		f(c)
 | 
						|
	}()
 | 
						|
 | 
						|
	return c
 | 
						|
}
 | 
						|
 | 
						|
func prompt(msg string) string {
 | 
						|
	reader := bufio.NewReader(os.Stdin)
 | 
						|
	fmt.Print(msg)
 | 
						|
	text, _ := reader.ReadString('\n')
 | 
						|
	// TODO: Trim trailing newline from the rhs of text.
 | 
						|
	return text
 | 
						|
}
 | 
						|
 | 
						|
func main() {
 | 
						|
	c := act(func(c chan interface{}) {
 | 
						|
		for {
 | 
						|
			x := <-c
 | 
						|
			fmt.Printf("[A] Received value: %v\n", x)
 | 
						|
 | 
						|
		}
 | 
						|
	})
 | 
						|
 | 
						|
	for {
 | 
						|
		x := prompt("[B] Enter a value: ")
 | 
						|
		c <- x
 | 
						|
	}
 | 
						|
	os.Exit(0)
 | 
						|
}
 |