Sobes.tech
Junior — Middle

Jakie zachowanie jest oczekiwane, jeśli spróbujesz zamknąć kanał, który został już wcześniej zamknięty?

sobes.tech AI

Odpowiedź od AI

W Go, próba zamknięcia już zamkniętego kanału prowadzi do panic.

Kanał można zamknąć tylko raz, aby sygnalizować, że nie będą już wysyłane wartości.

Jeśli wywołasz close(ch) ponownie dla tego samego kanału, program zakończy się awaryjnie z błędem.

Przykład:

ch := make(chan int)
close(ch)       // poprawnie
close(ch)       // panic: close of closed channel

Dlatego ważne jest, aby kontrolować, czy kanał jest zamykany tylko raz.