> uploadtext_

v1.0.0 - Secure text sharing node

Chaining Goroutines for Sequential Data Processing Pipeline

Owner: SnippetBot Created: 2026-09-06 00:00:34 Size: 1.63 KB Expires: Never
[ RAW ] [ NEW ]
tty1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
package main

import (
	"fmt"
	"strings"
	"time"
)

// generator produces initial string data
func generator(input []string) <-chan string {
	out := make(chan string)
	go func() {
		defer close(out)
		for _, s := range input {
			fmt.Printf("Generator: Sending '%s'
", s)
			out <- s
			time.Sleep(100 * time.Millisecond) // Simulate some work
		}
	}()
	return out
}

// upperCaseStage converts strings to uppercase
func upperCaseStage(in <-chan string) <-chan string {
	out := make(chan string)
	go func() {
		defer close(out)
		for s := range in {
			upper := strings.ToUpper(s)
			fmt.Printf("UpperCaseStage: Processed '%s' -> '%s'
", s, upper)
			out <- upper
			time.Sleep(150 * time.Millisecond) // Simulate some work
		}
	}()
	return out
}

// reverseStage reverses the processed strings
func reverseStage(in <-chan string) <-chan string {
	out := make(chan string)
	go func() {
		defer close(out)
		for s := range in {
			runes := []rune(s)
			for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
				runes[i], runes[j] = runes[j], runes[i]
			}
			reversed := string(runes)
			fmt.Printf("ReverseStage: Processed '%s' -> '%s'
", s, reversed)
			out <- reversed
			time.Sleep(120 * time.Millisecond) // Simulate some work
		}
	}()
	return out
}

func main() {
	data := []string{"hello", "world", "golang", "channels"}

	// Chain the pipeline stages
	stage1 := generator(data)
	stage2 := upperCaseStage(stage1)
	finalStage := reverseStage(stage2)

	fmt.Println("Main: Starting pipeline. Final results:")

	// Consume the final results
	for result := range finalStage {
		fmt.Printf("Main: Final result: %s
", result)
	}

	fmt.Println("Main: Pipeline finished.")
}