发布时间:2024-12-04 01:24:13
``` func mapWorker(in <-chan int, out chan<- int, mappingFunc func(int) int) { for num := range in { result := mappingFunc(num) out <- result } close(out) } func main() { input := []int{1, 2, 3, 4, 5} output := make(chan int) go mapWorker(input, output, func(x int) int { return x * x }) for result := range output { fmt.Println(result) } } ```
在上述代码中,我们定义了一个mapWorker函数,它接受一个输入管道(in),一个输出管道(out),以及一个映射函数(mappingFunc)。mapWorker函数会循环读取输入管道中的数据,通过映射函数对数据进行处理,并将结果发送到输出管道中。当输入管道关闭后,使用close()函数关闭输出管道。 在main函数中,我们创建了一个input切片,其中包含了要进行映射操作的数据。然后,我们使用make()函数创建一个output管道。接下来,我们通过调用mapWorker函数来启动一个goroutine,并将输入管道、输出管道和映射函数传入。最后,我们使用range语句从输出管道中逐个读取结果,并打印出来。``` func mapWorker(in <-chan int, out chan<- int, mappingFunc func(int) int) { for num := range in { result := mappingFunc(num) out <- result } close(out) } func main() { input := []int{1, 2, 3, 4, 5} output := make(chan int) go mapWorker(input, output, func(x int) int { return x * x }) go mapWorker(output, output, func(x int) int { return x + 1 }) for result := range output { fmt.Println(result) } } ```
在上述代码中,我们创建了两个mapWorker函数,分别用于进行平方和加一的映射操作。首先,我们启动第一个mapWorker函数,将数据从输入管道传递到输出管道。然后,我们再启动第二个mapWorker函数,将数据从输出管道再次传递到输出管道。最后,我们使用range语句从输出管道中读取结果,并打印出来。