В .proto задают package (или option go_package для Go), message с полями и номерами, service с rpc методами (входной и выходной тип). Для Go генерируют: .pb.go с сообщениями и .pb.grpc.go с интерфейсом сервера и клиентским кодом. Сервер реализует сгенерированный интерфейс и регистрирует его в grpc.Server.
syntax = "proto3";
option go_package = "pkg/proto";
service UserService {
rpc GetUser (GetUserRequest) returns (User);
}
message GetUserRequest { int64 id = 1; }
message User { int64 id = 1; string name = 2; }