当前位置: 首页 > 工具软件 > Proto.Menu > 使用案例 >

proto参数区分之package和option go_package

韦修文
2023-12-01

package用于proto,在引用时起作用;
option go_package用于生成的.pb.go文件,在引用时和生成go包名时起作用

示例:

syntax = "proto3";
package enumx;
option go_package = "github.com/wymli/bc_sns/dep/pb/go/enumx;enumx";

1 package

package是proto的包名,一个文件就是一个package,用于import时解析
如:

import "pfoo/foo.proto"

假设这个foo.proto 声明了

package demo

那么我们在其他包就要使用

demo.xxx

来引用foo.proto这个文件(package demo这个包)所声明的类型

这里pfoo/foo.proto是相对路径,取决于使用protoc -I  (大写i)传入时的搜索路径

2 go_package

option go_package = "github.com/wymli/bc_sns/dep/pb/go/enumx;enumx";

这里逗号(;)
后面是就是生成go代码时,package名
前面是生成代码时,如果其他proto 引用 了这个proto,那么他们就会使用逗号(;)前面的作为go包路径

如:
文件1:enumx.proto

// file enumx.proto

syntax = "proto3";

package demo1;
option go_package = "github.com/wymli/bc_sns/dep/pb/go/enumx;enumx";

enum E {
  E_UNSPECIFIED = 0;
  FILE = 1;
}

文件2: biz.proto

// file biz.proto

syntax = "proto3";

package demo2;
// 这里的option go_package其实可以随便写,因为不会被别人引用,不过还是按规范来吧
option go_package = "github.com/wymli/bc_sns/dep/pb/go/biz;biz";
import "enumx.proto";

message S {
  demo1.E content_type = 1;
}

注解:文件2引用了文件1结构体:E

执行命令:

book@ubuntu:~/pt1416/02-hellogolang/grpcTest/protodir$ ll
total 20
drwxrwxr-x 3 book book 4096 3月  30 18:09 ./
drwxrwxr-x 8 book book 4096 3月  30 18:08 ../
-rw-rw-r-- 1 book book  290 3月  30 18:08 biz.proto
-rw-rw-r-- 1 book book  169 3月  30 18:07 enumx.proto
book@ubuntu:~/pt1416/02-hellogolang/grpcTest/protodir$ protoc --go_out=plugins=grpc:. ./*.proto

// ----> 生成go代码后
路径:

book@ubuntu:~/pt1416/02-hellogolang/grpcTest/protodir/github.com/wymli/bc_sns/dep/pb/go$ pwd
/home/book/pt1416/02-hellogolang/grpcTest/protodir/github.com/wymli/bc_sns/dep/pb/go
book@ubuntu:~/pt1416/02-hellogolang/grpcTest/protodir/github.com/wymli/bc_sns/dep/pb/go$ ll
total 16
drwxrwxr-x 4 book book 4096 3月  30 18:09 ./
drwxrwxr-x 3 book book 4096 3月  30 18:09 ../
drwxrwxr-x 2 book book 4096 3月  30 18:09 biz/
drwxrwxr-x 2 book book 4096 3月  30 18:09 enumx/
book@ubuntu:~/pt1416/02-hellogolang/grpcTest/protodir/github.com/wymli/bc_sns/dep/pb/go$ tree -f .
.
├── ./biz
│   └── ./biz/biz.pb.go
└── ./enumx
    └── ./enumx/enumx.pb.go

2 directories, 2 files
book@ubuntu:~/pt1416/02-hellogolang/grpcTest/protodir/github.com/wymli/bc_sns/dep/pb/go$ 

文件3: biz.pb.go

// file biz.pb.go

// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.28.0
// 	protoc        v3.5.1
// source: biz.proto

package biz

import (
	enumx "github.com/wymli/bc_sns/dep/pb/go/enumx"
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	reflect "reflect"
	sync "sync"
)

...(略)

注解:文件3属于生成的go文件;

 类似资料: