proto参数区分之package和option go_package

proto参数区分之package和option go_package

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

相关资讯

2025年十大在线赚钱网站:最佳赚钱平台推荐
28365365tw五大联赛

2025年十大在线赚钱网站:最佳赚钱平台推荐

⌚ 07-17 👁️ 9932
委比、量比、委量差,你真的能看懂吗?
365体育官网登录入口

委比、量比、委量差,你真的能看懂吗?

⌚ 08-15 👁️ 5372