저는 이동 중에도 채널을 통해 병렬 처리 및 통신을 구현하려고합니다.골란 채널을 순서대로 읽으십시오.
기본적으로 해결하려고하는 것은 특정 데이터를 병렬로 처리하고 순서대로 결과를 얻는 것입니다.> 도입 된 유형은 Chunk
입니다 (아래 참조).
각 청크 처리에 대해 새 채널을 만들고 slice => 안에 보관하면 이후에 반복하여 순서대로 처리해야합니다.
내 프로그램의간체 버전 (https://play.golang.org/p/RVtDGgUVCV)입니다 :
package main
import (
"fmt"
)
type Chunk struct {
from int
to int
}
func main() {
chunks := []Chunk{
Chunk{
from: 0,
to: 2,
},
Chunk{
from: 2,
to: 4,
},
}
outChannels := [](<-chan struct {
string
error
}){}
for _, chunk := range chunks {
outChannels = append(outChannels, processChunk(&chunk))
}
for _, outChannel := range outChannels {
for out := range outChannel {
if out.error != nil {
fmt.Printf("[ERROR] %s", out.error)
return
}
fmt.Printf("[STDOUT] %s", out.string)
}
}
}
func processChunk(c *Chunk) <-chan struct {
string
error
} {
outChannel := make(chan struct {
string
error
})
go func() {
outChannel <- struct {
string
error
}{fmt.Sprintf("from: %d to: %d\n", c.from, c.to), nil}
close(outChannel)
}()
return outChannel
}
내가 볼의 출력은 다음과 같습니다 나는 그러나보고 기대하는 무엇
[STDOUT] from: 2 to: 4
[STDOUT] from: 2 to: 4
은 다음과 같습니다
[STDOUT] from: 0 to: 2
[STDOUT] from: 2 to: 4
여기서 내가 뭘 잘못하고 있니? 나는 그것을 보지 않는다.