Junior — Middle
Co się dzieje, jeśli spróbujesz odczytać dane z kanału, który w tym momencie nie zawiera elementów?
sobes.tech AI
Odpowiedź od AI
W Go, jeśli spróbujesz odczytać z kanału, który w danym momencie nie zawiera elementów, zachowanie zależy od typu kanału:
- Kanał z buforem: jeśli bufor jest pusty, odczyt blokuje się, dopóki nie zostanie zapisany element.
- Kanał bez bufora: odczyt blokuje się do momentu, aż inna gorutyna wyśle wartość.
W związku z tym odczyt z pustego kanału powoduje zablokowanie bieżącej gorutyny do momentu pojawienia się danych lub zamknięcia kanału.
Przykład:
ch := make(chan int)
// Odczyt z pustego kanału zablokuje wykonanie
val := <-ch // blokuje się, dopóki ktoś nie wyśle wartości
// Aby uniknąć blokady, można użyć select z default
select {
case val := <-ch:
fmt.Println("Otrzymano", val)
default:
fmt.Println("Brak danych w kanale")
}