-
Notifications
You must be signed in to change notification settings - Fork 178
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
protoc-gen-twirp 链接问题 #48
Comments
|
OK,我看Makefile 文件里面 没有涉及到 build protoc-gen-twirp 这个插件,直接使用 |
rpc/common/common.protosyntax = "proto3";
package common;
option go_package = "./common";
message Empty {
} rpc/mp/v1/public/service.protosyntax = "proto3";
package mp.v1.public;
option go_package = "./mp/v1/public";
import "common/common.proto";
service Server {
rpc Test (common.Empty) returns (TestResp);
} rpc 下面定义了一个service pb和一个 common pb,sniper下 pb 生成支持这样的结构吗? |
这里面有一个小细节
protoc 约定所有的插件名必须是 protoc-gen-XXX,这里的 XXX 对应 --out_XXX。早期 sniper 需要安装 protoc-gen-twirp 和 sniper 两个工具。后面我把 protoc-gen-twirp 的功能整合到 sniper 命令里。但 sniper 的命令不符合 protoc-gen-XXX 约定,所以在调用 protoc 的时候需要通过 |
嗯,看到了,感谢解答。 |
可以的。不过导入 proto 的路径需要从 rpc 目录开始。而且被导入的 proto 文件需要使用 go_package 声明自己的完整包名。如果项目的包名是 helloworld,那么 common.proto 的 go_package 应该是 |
好的,感谢。 |
测试了一下rpc输出,go_out的包名有错误,twrip的 package 输出也是和下面的 go out 一样。 func (t *twirp) generateFileHeader(file *protogen.File) {
t.P("// Package ", string(file.GoPackageName), " is generated by sniper ", Version, ", DO NOT EDIT.")
t.P("// source: ", file.Desc.Path())
pkgName := string(file.GoPackageName)
if strings.Contains(pkgName, "/") {
pkgName = strings.ReplaceAll(pkgName, "/", "_")
}
t.P(`package `, pkgName)
t.P()
}
// common.proto
syntax = "proto3";
package rpc.common;
option go_package = "sniper/rpc/common";
message Empty {
}
// service.proto
syntax = "proto3";
package rpc.mp.v1.public;
option go_package = "sniper/rpc/mp/v1/public";
import "rpc/common/common.proto";
service Server {
rpc Test (common.Empty) returns (TestResp);
}
message TestResp {
int32 code = 1;
string msg = 2;
} |
Makefile 里面的 $m 变量输出,不是期望的 rpc/common/common.proto=rpc/common;commonprotoc --plugin=protoc-gen-twirp=/Users/tdbackend/Devland/codes/go/libs/bin/sniper
|
$m 这个脚本看样是只能支持3级目录,3级以上处理就出问题了。 |
还有个问题,能把这个 protoc-gen-markdown 插件一起引入到protoc 脚本里吗? |
rpc/README.md 这里的
protoc-gen-twirp
是个死链接。正确的是 bilibili/twirp/protoc-gen-twirp 这个插件吗?The text was updated successfully, but these errors were encountered: