我正在尝试做的事情: 我试图通过三个阶段来理解/构建go管道。阶段1向通道A写入。阶段2具有多个go例程。每个go例程都从通道A读取,执行一些操作并将结果写入通道Bn(通道B1,B2..Bn)。第3阶段创建了n(=第2阶段中的通道总数)go例程,每个go例程从第2阶段的一个Channel中读取。它基于https://blog.golang.org/pipelines中描述的有限并行性
问题: 管道按预期工作正常,操作在go例程之间分配。但是,当我进行转义分析时,发现从一个阶段发送到另一个阶段的通道参数被报告为“泄漏参数”。
代码段: 为简单起见,我发布的代码显示第1阶段通道的创建,第2阶段则打印从第1阶段读取的值。
package main
import "fmt"
func createStageOne(numOfJobs int) <-chan int {
stageOneChannel := make(chan int)
go func(nJobs int) {
for i := 0; i < nJobs; i++ {
stageOneChannel <- i
}
close(stageOneChannel)
}(numOfJobs)
return stageOneChannel
} // stageOneChannel closes and go routine exits once nJobs are completed
func createStageTwo(in <-chan int, completionFlag chan struct{}) {
go func() {
for n := range in {
fmt.Println("Received from stage 1 channel ", n)
} …Run Code Online (Sandbox Code Playgroud) go ×1