Вам необходимо вызывать Recv, пока вы не получите io.EOF при взаимодействии с grpc.ClientStreams?
Предположим, я определил следующую службу gRPC:
service Library {
rpc Search(SearchBookRequest) returns (stream SearchBookResponse) {}
}
message SearchBookRequest {
string term = 1;
int32 max_results = 2;
}
message SearchBookResponse {
int32 book_id = 1;
}
Он возвращает результаты поиска обратно до указанного максимума. Могу ли я делать что-то подобное при взаимодействии со службой через Go API gRPC?
for i:=0; i<maxResults; i++ {
search_result, err := stream.Recv()
if err == io.EOF {
// Note: If `maxResults` are returned this will never be reached.
break
}
if err != nil {
log.Fatalf("search error: %v", err)
}
fmt.Printf("Book-ID: %d\n", search_result.BookId)
}
Или я должен продолжать звонить Recv
пока я не получу io.EOF
гарантировать, что gRPC правильно очищает все свои ресурсы?
1 ответ
Решение
Ваш код правильный.
Вы можете выйти на ошибки. Вам не нужно ждать EOF.