以下统一在Downloads目录执行:

1、打开终端

$wget https://github.com/google/protobuf/releases/download/v3.6.1/protobuf-all-3.6.1.tar.gz $tar zxvf protobuf-all-3.6.1.tar.gz

2、autogen.sh需要gtest包,但需要翻墙才能使用,翻不了就用这个:

$cd protobuf-2.6.1 $vim autogen.sh

把这个:

echo “Google Test not present. Fetching gtest-1.5.0 from the web…” curl http://googletest.googlecode.com/files/gtest-1.5.0.tar.bz2 | tar jx mv gtest-1.5.0 gtest

修改为:

wget https://github.com/google/googletest/archive/release-1.5.0.tar.gz tar xzvf release-1.5.0.tar.gz mv googletest-release-1.5.0 gtest

3、protobuf默认安装在 /usr/local 目录

$ ./configure $ make #编译,时间有点长 $ make check $ sudo make install

4、检查

$protoc —version

报错protoc: error while loading shared libraries: libprotoc.so.8: cannot open shared

执行:

$sudo ldconfig

5、安装插件
进入网址www.github.com/golang/protobuf,下载所有code,解压到当前文件夹,
里面会有个…master文件夹,把里面的master重命名为protobuf,
并剪切到$GOPATH/src/github.com/golang下

6、编译

$cd $GOPATH/src/github.com/golang/protobuf/protoc-gen-go $go build $sudo cp protoc-gen-go /bin/

如果protoc-gen-go能tab自动补齐说明成功。


测试(必看):

syntax = “proto3”;

enum School{ S1 = 0; }

message People{

  1. string name = 1;
  2. int32 age = 2;

}

message Student{

  1. int32 weight = 1;

}

service hello{

  1. rpc SayHello (People) returns (Student);

}

编译:

$protoc —go_out=plugins=grpc:./ *.proto

若报错如下,是因为在 proto3 的语法中缺少了 option go_package(有可能)

protoc-gen-go: invalid Go import path “.” for “myproto.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.

需要在syntax添加option信息,

option go_package = “path;name”; //path 表示生成的go文件的存放地址,会自动生成目录的。 //name 表示生成的go文件所属的包名

如: syntax = “proto3”; option go_package = “./;pb”; //不加这一句就是会报错

参考:https://blog.csdn.net/xiexievv/article/details/47396725
https://blog.csdn.net/u014774853/article/details/109059783
https://blog.csdn.net/weixin_37989267/article/details/111724645