Я пытаюсь использовать REST over gRP C, используя аннотации Google API. К сожалению, я столкнулся с проблемой прото c, сообщающей мне, что annotations.proto не существует или имел ошибки. Я напрасно попробовал несколько исправлений.
Я даже попытался переустановить полный стек на случай, если что-то сделал не так. Я опишу вам как можно больше полных строк и файлов, которые я установил из моей установки fre sh.
Из установки fre sh go. Я набираю следующие строки оболочки:
$ mkdir sources/golang
$ echo 'export GOPATH=$HOME/sources/golang' >> $HOME/.zshrc
$ source ~/.zshrc
$ cd sources/golang
$ mkdir src
$ cd src
$ export PATH=$PATH:$GOPATH/bin
$ go get -u google.golang.org/grpc
$ go get -u github.com/golang/protobuf/protoc-gen-go
$ go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway
$ go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger
$ mkdir -p test/proto/test
$ cd test/proto/test
$ vim test.proto
В моем файле test.proto я написал очень простые c строки:
syntax = "proto3";
package main;
import "google/api/annotations.proto";
service Tester {
rpc Test (Request) returns (Reply) {
option (google.api.http) = { get: "/v1/test" };
}
}
message Request {
string Message = 1;
}
message Reply {
string Message = 1;
}
Затем
$ cd $GOPATH/src
$ vim main.go
По моему. go, очень основы c тоже:
package main
import (
tc "test/proto/test"
"context"
"fmt"
"log"
"net"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
)
func main() {
err := StartServer("tcp", "127.0.0.1:50051")
if err != nil {
fmt.Printf("Error!! %s", err)
}
}
type Server struct {
tc.UnimplementedTesterServer
}
func (s *Server) Test(ctx context.Context, in *tc.Request) (*tc.Reply, error) {
return &tc.Reply{Message: ""}, nil
}
func StartServer(protocol string, port string) error {
lis, err := net.Listen(protocol, port)
if err != nil {
fmt.Printf("failed to listen: %v", err)
}
s := grpc.NewServer()
tc.RegisterTesterServer(s, &Server{})
error := s.Serve(lis)
if error != nil {
fmt.Printf("failed to serve: %v", error)
return error
}
return nil
}
Наконец, я пытаюсь скомпилировать мои прото-файлы:
$ protoc --proto_path=.:$GOPATH/src --go_out=plugins=grpc:. proto/*/*.proto
И у меня систематически возникает следующая ошибка:
proto/test/test.proto:5:1: Import "github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis/google/api/annotations.proto" was not found or had errors.
Когда я вижу, что файлы получают go get ...
они помещаются в $ GOPATH / pkg / mod /
Например, файл annotations.proto googleapis находится в: $ GOPATH / pkg / mod / github.com / grp c -ecosystem / grpc-gateway@v1.12.1/third_party/googleapis/google/api/annotations.proto* 1 077 *
Может быть, причина?