или cntlC на клиенте ломался сервер и вылетали ошибки по поводу отмены контекста и паника grpc.
func (s server) Max(stream pb.Math_MaxServer) error {
defer func() {
if err := recover(); err != nil {
log.Println("panic occurred:", err)
serverIstopped<-struct{}{}
}
}()
select{
case <- stream.Context().Done():
return stream.Context().Err()
default:
go func(){
for {
select {
case <- serverIstopped:
return
default:
time.Sleep(10 * time.Millisecond)
for i := 0; i < 5; i++ {
_ = stream.Send(&pb.Response{Result: int32(i)})
}
}
}
}()
for {
select {
case <- serverIstopped:
return fmt.Errorf("...")
default:
req, _ := stream.Recv()
log.Println(req.Num)
}
}
}
Я попытался сделать так, чтобы не падало, можно было как то по другому сделать, например?
не не, там паника была изза отключения клиента, то есть в функции Max, а не внутри горутины или я что то не так понял, но оно почему то не падает теперь
ну в функции max кроме запуска горутины и нет ничего
там такая ошибка выпадает: panic occurred: runtime error: invalid memory address or nil pointer dereference
Обсуждают сегодня