func labelsEmitter(numbers chan int) <-chan string {
fmt.Println("go labelsEmitter")
out := make(chan string, 3)
defer close(out)
for num := range numbers {
time.Sleep(time.Millisecond * 200)
str := fmt.Sprintf("Number %d", num)
out <- str
}
return out
}
var wg = sync.WaitGroup{}
wg.Add(1)
go labelsReceiver(outChan, &wg)
//time.Sleep(time.Millisecond) // Так попытался убедиться, что получатель стартует первым. Не знаю как правильно сделать.
wg.Wait() // ждем пока не будет wg.done()
func labelsReceiver(labelChanRcv <-chan string, wg *sync.WaitGroup) {
wg.Done()
fmt.Println("go labelsReceiver")
for label := range labelChanRcv {
fmt.Println("label", label)
}
}
if resp.StatusCode != 200 {
w.WriteHeader(http.StatusInternalServerError)
return
}
import (
"fmt"
"time"
)
//Запрос к станции
func someRequest(phone string, chData chan string) {
for {
fmt.Println("start request", phone)
time.Sleep(time.Second * 5) //Эмулируем задержку при выполнении
chData <- "Data from stantion " + phone
}
}
func main() {
var phones = [5]string{"one", "two", "three", "four", "five"}
var dataCh chan string //канал с данными со станции для записи в бд
dataCh = make(chan string) // Инициализация канала
go func(){ //Для записи в бд
//Ожидаем данных в канал dataCh
for {
storeDbData := <- dataCh
println("receive data from chanel and trying store to db", storeDbData)
}
}()
for _, phone := range phones{
go someRequest(phone, dataCh)
}
}
Ещё одна горутина читает из этого канала через range и заносит данные в базу.
что мешает сделать метод validate: