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文件;