Skip to content

Instantly share code, notes, and snippets.

@facchettos
Created April 22, 2019 12:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save facchettos/eec9889929e8b37ba8f623a6efba2863 to your computer and use it in GitHub Desktop.
Save facchettos/eec9889929e8b37ba8f623a6efba2863 to your computer and use it in GitHub Desktop.
stream pipeline example
package main
import (
"fmt"
"io"
"os"
"strings"
"unicode"
)
func removeEs(input io.Reader, output *io.PipeWriter) {
buff := make([]byte, 10)
for {
tempBuffer := make([]byte, 0, 10)
n, err := input.Read(buff)
for i := 0; i < n; i++ {
if buff[i] != 'e' {
tempBuffer = append(tempBuffer, buff[i])
}
}
if n != 0 {
output.Write(tempBuffer[:n])
}
if err != nil {
output.Close()
break
}
}
}
func streamUpper(input *io.PipeReader, output *io.PipeWriter) {
buff := make([]byte, 10)
for {
tempBuffer := make([]byte, 0, 10)
n, err := input.Read(buff)
for i := 0; i < n; i++ {
tempBuffer = append(tempBuffer, byte(unicode.ToUpper(rune(buff[i]))))
}
if n != 0 {
output.Write(tempBuffer[:n])
}
if err != nil {
output.Close()
break
}
}
}
func removeSpace(input *io.PipeReader, output io.Writer) {
buff := make([]byte, 10)
for {
tempBuffer := make([]byte, 0, 10)
n, err := input.Read(buff)
for i := 0; i < n; i++ {
if buff[i] == ' ' {
tempBuffer = append(tempBuffer, ',')
} else {
tempBuffer = append(tempBuffer, buff[i])
}
}
if n != 0 {
output.Write(tempBuffer[:n])
}
if err != nil {
break
}
}
}
func main() {
reader1, writer1 := io.Pipe()
reader2, writer2 := io.Pipe()
str := "here is a string where all the letters are going to be uppercased and all 'e' are going to be removed and spaces changed with comas\n"
fmt.Println(str)
strReader := strings.NewReader(str)
go removeEs(strReader, writer1)
go streamUpper(reader1, writer2)
removeSpace(reader2, os.Stdout)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment