buf 构建库中 go_package_prefix 的用途是什么?

Stu*_*idd 7 go buf

我不明白 go_package_prefix 代码片段在生成 protobuf 文件中的用途

version: v1
managed:
  enabled: true
  go_package_prefix:
    default: github.com/imsobad/grpc-gateway-demo
    except:
      - buf.build/googleapis/googleapis
plugins:
  - plugin: buf.build/protocolbuffers/go:v1.30.0
    out: gen/go
    opt:
      - paths=source_relative
  - plugin: buf.build/grpc/go:v1.3.0
    out: gen/go
    opt:
      - paths=source_relative
      - require_unimplemented_servers=false
  - plugin: grpc-gateway
    out: gen/go
    opt:
      - paths=source_relative
      - generate_unbound_methods=true
Run Code Online (Sandbox Code Playgroud)

我想了解命令“go_package_prefix”是如何工作的

小智 0

对于任何仍然感兴趣的人,根据文档: https ://buf.build/docs/generate/management-mode/ 托管模式可以帮助您或其他开发人员管理“buf”项目中的.proto文件,而不是单独管理它们。不过,文档应该比我解释得更好。所以读一下吧。真的。它有很好的记录。

不过我可以给你举一个例子。

假设您有一个.proto文件,如下所示:

syntax = "proto3";

package v1.model;

message SomeMessage {
  string foo = 1;
  uint32 bar = 2;
}
Run Code Online (Sandbox Code Playgroud)

请注意包规范,以及缺少 go_package 选项。

当使用带有默认前缀的托管模式时,您的本质上是以您指定的前缀选项为前缀的。例如,您可以简单地指定com.your.domain/projectgo_package_prefix默认值,然后,所有可能依赖于这些定义的编译原型将com.your.domain/project在其导入中作为前缀(无需为每个单独的原型文件指定 go_package)。

syntax = "proto3";

package v1.model;

message SomeMessage {
  string foo = 1;
  uint32 bar = 2;
}
Run Code Online (Sandbox Code Playgroud)

希望这能解释该选项背后的一些目的go_package_prefix

注意:我不是母语人士,所以如果我的措辞或解释令人反感,请随时纠正我。