Know-How
gRPC Service v Go
gRPC je high-performance RPC framework od Googlu. Protobuf serializace, HTTP/2, streaming, code generation.
Protobuf definice
syntax = "proto3";
package user;
option go_package = "./pb";
service UserService {
rpc GetUser(GetUserRequest) returns (User);
rpc ListUsers(ListUsersRequest) returns (stream User);
}
message User {
int32 id = 1;
string name = 2;
string email = 3;
}
message GetUserRequest { int32 id = 1; }
message ListUsersRequest { int32 limit = 1; }
Go server
type server struct {
pb.UnimplementedUserServiceServer
}
func (s *server) GetUser(ctx context.Context, req *pb.GetUserRequest) (*pb.User, error) {
user, err := db.FindUser(req.Id)
if err != nil {
return nil, status.Errorf(codes.NotFound, "user not found")
}
return &pb.User{Id: user.ID, Name: user.Name, Email: user.Email}, nil
}
func main() {
lis, _ := net.Listen("tcp", ":50051")
s := grpc.NewServer()
pb.RegisterUserServiceServer(s, &server{})
s.Serve(lis)
}
Klíčový takeaway
gRPC pro microservices komunikaci — rychlejší než REST, typově bezpečné, streaming. Protobuf = schema.