Почему при чтении из канала в цикле
for в
main() появляется задержка в начале работы?
Без
for работает без задержки (хотя и неправильно, понятно).
package main
import (
"fmt"
"time"
)
func Send(myChan chan int) {
var testStatus = 200 // Тест-статус результата (меняется непредсказуемо с каждой итерацией цикла): 100 - успешно; 200 - неудачно.
// Значения итогового_статуса (передается в main()): 1 - "успешно"; 2 - "неудачно впервые"; 3 = "неудачны все попытки".
for i := 1; i < 4; i++ { // максимальное количество попыток.
if testStatus == 100 { // Если успешно.
fmt.Println("Успешно. i =", i)
myChan <- 1
close(myChan)
}
if testStatus == 200 && i == 1 { // Неудачно впервые.
fmt.Println("Неудачно впервые... i =", i)
myChan <- 2
}
time.Sleep(time.Second * 2)
}
fmt.Println("\nНеудачны все попытки.")
myChan <- 3
close(myChan)
}
func main() {
var myChan = make(chan int, 2) // Канал для возврата итогового_статуса. Буферизирован - чтобы не блокировалось.
go Send(myChan)
for {
status_Ch := <-myChan // Возвращенный каналом статус_отправки (1 / 2 / 3).
if status_Ch == 1 {
fmt.Println("main: Успешно! status_Ch =", status_Ch)
}
if status_Ch == 2 {
fmt.Println("main: Неудачно впервые, status_Ch =", status_Ch)
}
if status_Ch == 3 {
fmt.Println("main: Все попытки неудачны, status_Ch =", status_Ch)
}
}
}
Песочница:
https://go.dev/play/p/DUbMwOjEfc4