CentOS 下 Go gRPC 编译环境搭建

  • 安装 protobuf

    git clone https://github.com/google/protobuf.git
    cd protobuf
    git checkout v3.4.1 -b v3.4.1
    ./autogen.sh
    ./configure
    make
    make install
    
  • 安装 protobuf go 插件

    go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
    

    ~/.profile 中将 protoc-gen-go 所在路径加到 PATH 环境变量中

    PATH="`go env GOPATH`/bin:$PATH"
    

    最新版本的 protoc-gen-go 默认生成的 protobuf 4.x 的代码,我们的项目目前还 是使用 protobuf 3.x,这会导致生成的代码无法通过编译,错误信息

    xxx.pb.go:2799:21: c.cc.NewStream undefined (type *grpc.ClientConn has no field or method NewStream)
    xxx.pb.go:2831:13: c.cc.Invoke undefined (type *grpc.ClientConn has no field or method Invoke)
    

    需要改回生成 protobuf 3.x 的代码,修改 github.com/golang/protobuf/protoc-gen-go/grpc/grpc.go

    const generatedCodeVersion = 4
    

    改为

    const generatedCodeVersion = 3
    

    重新编译安装 protoc-gen-go

    cd github.com/golang/protobuf
    make install
    
  • 参考

    golang开发环境搭建-安装go 和 grpc - 简书

    grpc version conflict · Issue #264 · golang/protobuf