问题链接:
https://coding.imooc.com/learn/questiondetail/V21046QJvp7PmxQw.html
https://coding.imooc.com/learn/questiondetail/GzLgV6kW8e76kWxb.html
问题原因:
根据解答经验,大都在第二课遇到此问题。
运行命令如下:
docker run --rm -v $ (pwd):$ (pwd) -w $(pwd) -e ICODE=xxx cap1573/cap-protoc -I ./ --go_out=./ --micro_out=./ ./*.proto
然后运行失败。
解决办法:
以Mac本本为例:
你的编程目标应该是这样的:
就是说使用protoc命令,不再用docker run 那个命令了。
部署步骤:
以下命令可直接复制粘贴,手敲容易出错。
步骤1. brew安装
cd ~
brew install protobuf
protoc --version
/*
安装成功,会看到如下输出:
libprotoc 3.13.0
*/
步骤2. 安装针对Go语言的代码生成插件
go get github.com/golang/protobuf/protoc-gen-go
步骤3. 安装protoc-micro-go
cd ~
git clone https://github.com/micro/protoc-gen-micro.git $GOPATH/src/github.com/micro/protoc-gen-micro
cd $GOPATH/src/github.com/micro/protoc-gen-micro
go build
sudo cp protoc-gen-micro $GOROOT/bin
截图如下:
执行完以上4步骤之后就算完成,以课程new-micro/proto/cap/imooc.proto
为例:
命令:
// 记得在proto文件中添加 option, 是下面这样的
option go_package = ".;proto";
imooc.proto
代码:
syntax = "proto3";
// 记得添加 option, 是下面这样的
option go_package = ".;proto";
package go.micro.service.imooc;
service Cap {
// SayRequest 接受客户端请求参数 SayResponse 将结果返回给客户端
rpc SayHello(SayRequest) returns (SayResponse ) {}
}
message SayRequest {
string message = 11;
}
message SayResponse {
string answer = 12;
}
测试结果如下:
可以看到大功告成!
细节总结:
你需要在cap老师给的proto文件添加这一行代码:
// 记得添加 option, 是下面这样的
option go_package = ".;proto";
记住,以后该课程,使用protoc,不使用docker run的话,你要在所有的protoc文件见添加这行命令,切记勿忘!!!
点个赞,置个顶,是对我输出的鼓励~
2022,奥利给~
其它问题:
问题图片描述:
问题信息描述:
[root@cap~] protoc -I ./ --go_out=./ --micro_out=./ ./imooc.proto
protoc-gen-go: invalid Go import path “.” for "imooc.proto"
The import path must contain at least one forward slash (’/’) character.
See https://developers.google.com/protocol-buffers/docs/reference/go-generated#package for more information.
–go_out: protoc-gen-go: Plugin failed with status code 1.
解决办法:
该问题因人而异,一般是自己的protoc环境装的有问题导致的这个问题。
ps:我的protoc是 c++版,然后make install 编译的,这么做没遇到这个问题。
到这里应该就没啥问题了,该遇到的问题都有命令和图片说明。