假设我定义了以下gRPC服务:
service Library {
rpc Search(SearchBookRequest) returns (stream SearchBookResponse) {}
}
message SearchBookRequest {
string term = 1;
int32 max_results = 2;
}
message SearchBookResponse {
int32 book_id = 1;
}
它将搜索结果流回到指定的最大值。当通过gRPC的Go API与服务交互时,我可以做这样的事情吗?
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正确清理其所有资源?
答案 0 :(得分:0)
您的代码是正确的。
您可以退出错误。您无需等待EOF。