为什么选 gRPC?
相比 REST/JSON,gRPC 基于 HTTP/2 + Protobuf 二进制序列化,延迟低、带宽占用小,且天然支持双向流。
定义 Proto
syntax = "proto3";
service ArticleService {
rpc GetArticle(GetArticleRequest) returns (Article);
rpc ListArticles(ListArticlesRequest) returns (stream Article);
}
message Article {
int64 id = 1;
string title = 2;
}Go 服务实现
func (s *server) GetArticle(ctx context.Context, req *pb.GetArticleRequest) (*pb.Article, error) {
a, err := s.store.Get(req.Id)
if err != nil {
return nil, status.Errorf(codes.NotFound, "not found")
}
return a, nil
}