proto文件引入另一个proto文件不成功

proto文件引入另一个proto文件不成功

老师好,如下图。 我按照您在“grpc和protobuff进阶”章节1-5中,按照您视频中的代码操作,但是,proto_one.proto文件引入base.proto文件不成功。

执行protoc命令,提示找不到base.proto文件

请问这是什么问题呢?


https://img1.sycdn.imooc.com//climg/6453d30309c4025917221035.jpg

https://img1.sycdn.imooc.com//climg/6453d368092c80c105320278.jpg

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
提问者 CarleTang 2023-05-05 00:14:22
  • 提问者 CarleTang #1

    环境配置如下:

    (1)M1 Mac mini

    (2)GoLand 2022.2.2

    (3)插件Protocol Buffers版本 222.3739.57

    (4)protoc version:3.21.12

    (5)protoc-gen-go@v1.28

    (6)protoc-gen-go-grpc@v1.2


    1、如果给 base.proto 也增加一句 “option go_package = "./;proto";”,

    此时执行:

    $ protoc --go_out=. --go-grpc_out=require_unimplemented_servers=false:. hello.proto

    $ protoc --proto_path=. --go_out=. --go-grpc_out=require_unimplemented_servers=false:. hello.proto

    $ protoc --go_out=. --go_opt=paths=source_relative \

        --go-grpc_out=. --go-grpc_opt=paths=source_relative \

        hello.proto 

    不会报错,但是生成的 hello.pb.go 文件有报错,和问题截图标注的错误一样;

    【这个语句参考的是官方文档:https://grpc.io/docs/languages/go/quickstart/】

    https://img1.sycdn.imooc.com//climg/6453dc3009067ea811770567.jpg


    2.1、修改 hello.proto 文件,修改成:import "proto/base.proto";

    同时给 base.proto 也增加一句 “option go_package = "./;proto";

    执行(1)中的3个命令,提示信息如下图所示:

    https://img1.sycdn.imooc.com//climg/6453de35090d2e2a09230179.jpg


    2.2、修改 hello.proto 文件,修改成:import "proto/base.proto";

    把 base.proto 中的 “option go_package = "./;proto";”去掉,

    执行(1)中的3个命令,提示信息如下图所示:

    https://img1.sycdn.imooc.com//climg/6453de35090d2e2a09230179.jpg


    2023-05-05 00:38:43
  • 慕沐735460 回复 提问者 CarleTang #2

    https://img1.sycdn.imooc.com//climg/6454c2410989350208150572.jpg


    这是我的工程内容


    base.proto文件内容如下

    syntax = "proto3";
    
    package base;
    
    option go_package = "goStudy/defaultVal/proto/base";
    
    message Empty {
      string message = 1;
    }


    helloworld.proto文件内容

    syntax = "proto3";
    
    package helloworld;
    
    // 声明 包名
    option go_package = "goStudy/defaultVal/proto/helloworld";
    
    import "base/base.proto";
    
    service Greeter {
      rpc SayHello(HelloRequest) returns (HelloReply);
      rpc Ping(base.Empty) returns (Pong);
    }
    
    message HelloRequest {
      string url=1;
      string name=2;
    }
    
    message HelloReply {
      string message = 1;
    }
    
    message Pong {
      string id = 1;
    }


    main.go的内容:

    package main
    
    import (
        "context"
        "fmt"
        base "goStudy/defaultVal/proto/base"
        hello "goStudy/defaultVal/proto/helloworld"
        "google.golang.org/grpc"
        "net"
    )
    
    type Server struct {
    }
    
    func (s *Server) SayHello(ctx context.Context, request *hello.HelloRequest) (*hello.HelloReply, error) {
        return &hello.HelloReply{Message: "Hello " + request.Name}, nil
    }
    
    func (s *Server) Ping(ctx context.Context, empty *base.Empty) (*hello.Pong, error) {
        return &hello.Pong{Id: "zengraoli"}, nil
    }
    
    func main() {
        g := grpc.NewServer()
        s := Server{}
        hello.RegisterGreeterServer(g, &s)
        lis, err := net.Listen("tcp", fmt.Sprintf(":8080"))
        if err != nil {
           panic("failed to listen: " + err.Error())
        }
        g.Serve(lis)
    }



    使用到的proto编译命令如下

    protoc -I=. -I=./.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=require_unimplemented_servers=false:. --go-grpc_opt=paths=source_relative base.proto
    
    protoc -I=. -I=./.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=require_unimplemented_servers=false:. --go-grpc_opt=paths=source_relative helloworld.proto



    protoc version:3.21.12

    protoc-gen-go@v1.28

    protoc-gen-go-grpc@v1.2

    go version:1.18




    2023-05-05 16:48:10
  • 目前server跑起来没问题,编译器也不会出现找不到包的问题

    2023-05-05 16:48:58
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Go开发工程师全新版
  • 参与学习       490    人
  • 解答问题       559    个

风口上的技术,薪资水平遥遥领先,现在学习正值红利期! 未来3-5年,Go语言势必成为企业高性能项目中不可替代的语言 从基础到项目实战再到重构,对转行人员友好,真正从入门到精通!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师