идеологически правильно решение - каждой горутине по своему shutdown каналу, а код лучше кидать на плейграунд и в идеале, доводить его там до минимально работоспособного примера
Благодарю.. по поводу плейграунда понял, но как там описать свой код я не знаю... ниже попробую пояснить...
я уже модифицировал код и сделал два shutdown канала, но у меня не получается завершить listenRead
завершение должно происходить если происходит разрыв соединения склиентом по websocket
select {
case <-client.doneRead:
fmt.Println("AAAAAAAAAAAA")
// client.doneCh <- true
fmt.Printf("listenRead у клиента %d работу закончил \n", client.id)
return
default:
var msg IncomingMessage
err := websocket.JSON.Receive(client.ws, &msg)
if err == io.EOF {
client.doneRead <- true
client.doneWrite <- true
} else if err != nil {
fmt.Printf("Проблема чтения сообщения от клиента \n: %v", err)
// Если произошла ошибка соединения, допустим упал клиент, то убираем это соединение.
client.doneRead <- true
client.doneWrite <- true
} else {
AppServer.IncomingMessage(client, &msg)
}
}
подучается что я из горутины пишу в канал который должен её же и закрыть... и я не понимаю почему при записи в канала client.doneRead чтение из него после не происходит...