首页>教程>Dapr教程>Dapr-Daprd

Dapr-Daprd

Daprd Proto代码生成

Daprd proto代码生成的方法和常见问题

Dapr 新版本中对proto文件的代码生成有了极大改进,非常方便。

Dapr 新版本中proto文件的代码生成可以简单参考官方 README 文件的说明:

https://github.com/dapr/dapr/tree/master/dapr

步骤一:安装Protoc

目前 daprd 要求的版本是 v3.14.0

linux 安装

如果之前安装过其他,则需要删除已经安装的版本:

sudo rm -rf /usr/local/include/google/protobuf/
sudo rm /usr/local/bin/protoc

下载并解压缩之后,按照 readme.txt 文件的提示,复制bin文件和clude目录到合适的位置:

$ unzip protoc-3.14.0-linux-x86_64.zip

$ sudo cp -r include/google/ /usr/local/include/
# 需要设置权限可读和可执行,755
$ sudo chmod -R 755 /usr/local/include/google
$ sudo cp bin/protoc /usr/local/bin/
$ sudo chmod +x /usr/local/bin/protoc

验证安装结果:

$ protoc --version
libprotoc 3.14.0

Mac 安装

如果之前安装过其他,则需要删除已经安装的版本:

sudo rm -rf /usr/local/include/google/protobuf/
sudo rm /usr/local/bin/protoc

下载 protoc-3.14.0-osx-x86_64.zip 文件,解压缩之后

cd protoc-3.14.0-osx-x86_64
sudo cp -r include/ /usr/local/include/
# 需要设置权限可读和可执行,755
$ sudo chmod -R 755 /usr/local/include/google
$ sudo cp bin/protoc /usr/local/bin/
$ sudo chmod +x /usr/local/bin/protoc

protoc 安装完成之后,验证一下版本:

$ protoc --version
libprotoc 3.14.0

步骤二:初始化proto工具

安装 protoc-gen-go 和 protoc-gen-go,dapr的 make file 为此准备了专门的命令 init-proto

$ make init-proto
go get google.golang.org/protobuf/cmd/protoc-gen-go@v1.25.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1.0
go: found google.golang.org/protobuf/cmd/protoc-gen-go in google.golang.org/protobuf v1.25.0

步骤三:从proto生成代码

终于可以开始正式的代码生成了,dapr的 make file 也为此准备了专门的命令 gen-proto

$ make gen-proto
protoc --go_out=. --go_opt=module=github.com/dapr/dapr --go-grpc_out=. --go-grpc_opt=require_unimplemented_servers=false,module=github.com/dapr/dapr ./dapr/proto/common/v1/*.proto
protoc --go_out=. --go_opt=module=github.com/dapr/dapr --go-grpc_out=. --go-grpc_opt=require_unimplemented_servers=false,module=github.com/dapr/dapr ./dapr/proto/internals/v1/*.proto
protoc --go_out=. --go_opt=module=github.com/dapr/dapr --go-grpc_out=. --go-grpc_opt=require_unimplemented_servers=false,module=github.com/dapr/dapr ./dapr/proto/operator/v1/*.proto
protoc --go_out=. --go_opt=module=github.com/dapr/dapr --go-grpc_out=. --go-grpc_opt=require_unimplemented_servers=false,module=github.com/dapr/dapr ./dapr/proto/placement/v1/*.proto
protoc --go_out=. --go_opt=module=github.com/dapr/dapr --go-grpc_out=. --go-grpc_opt=require_unimplemented_servers=false,module=github.com/dapr/dapr ./dapr/proto/runtime/v1/*.proto
protoc --go_out=. --go_opt=module=github.com/dapr/dapr --go-grpc_out=. --go-grpc_opt=require_unimplemented_servers=false,module=github.com/dapr/dapr ./dapr/proto/sentry/v1/*.proto
go mod tidy

常见错误

找不到共享文件

报错如下:

$ make gen-proto

protoc --go_out=. --go_opt=module=github.com/dapr/dapr --go-grpc_out=. --go-grpc_opt=require_unimplemented_servers=false,module=github.com/dapr/dapr ./dapr/proto/common/v1/*.proto
google/protobuf/any.proto: File not found.
dapr/proto/common/v1/common.proto:10:1: Import "google/protobuf/any.proto" was not found or had errors.
dapr/proto/common/v1/common.proto:55:3: "google.protobuf.Any" is not defined.
dapr/proto/common/v1/common.proto:76:3: "google.protobuf.Any" is not defined.
make: *** [Makefile:260:gen-proto-common] 错误 1

这个错误发生的原因通常是 protoc 安装时的 include 文件未能放置好,或者是相关的目录没有权限。经测试验证需要读和可执行权限,因此设置755:

# 需要设置权限可读和可执行,755
$ sudo chmod -R 755 /usr/local/include/google
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索