Я пытаюсь написать последовательный конвейер обработки в Go, используя простой поддельный пример. Он пересекает фальшивый каталог и запускает некоторые преобразования. Таким образом, между ними есть строковый канал. После того, как функция записывает данные, вторая функция читает их.
Мне кажется, что это работает и работает только последовательно, когда я помещаю ключевое слово go перед функцией WalkFakeDirectory, как показано в примере кода ниже ( детская площадка ).
Был бы очень признателен, если кто-нибудь может объяснить, как это работает?
package main
import (
"fmt"
"strings"
"sync"
"time"
)
func main() {
done := make(chan int)
path := make(chan string)
defer close(done)
//var wg sync.WaitGroup - Not working too
//wg.Add(1)
fmt.Println("walking file path")
go WalkFakeDirectoy(done, path)
//wg.Add(1)
ConvertToUpperCase(path, done)
//wg.Wait()
fmt.Println("done!")
//time.Sleep(2000) // Not working
}
func ConvertToUpperCase(files chan string, done chan int) {
for file := range files {
fmt.Println("converting data data", strings.ToUpper(file))
}
}
func WalkFakeDirectoy(done chan int, path chan<- string) {
func() {
list := []string{"abc", "def", "fgh", "ijk", "mnn"}
for _, file := range list {
fmt.Println("getting data", file)
path <- file
time.Sleep(3000)
}
}()
}