package main import ( "bufio" "os" "strings" ) // pipedInput looks for data queued up on stdin. func pipedInput() bool { stat, _ := os.Stdin.Stat() if (stat.Mode() & os.ModeCharDevice) == 0 { return true } return false } func main() { // Process input and output with bufio sti := bufio.NewScanner(os.Stdin) sto := bufio.NewWriter(os.Stdout) ste := bufio.NewWriter(os.Stderr) // Check for existing data if !pipedInput() { // Prompt is there is none // fmt.Fprintln(os.Stderr, "Feed me words!") ste.WriteString("Feed me words!\n") ste.Flush() } for sti.Scan() { // Stop on an empty string if sti.Text() == "" { break } // Process the incoming strings titled := strings.Title(sti.Text()) // fmt.Println(titled) sto.WriteString(titled + "\n") sto.Flush() } }