wget https://studygolang.com/dl/golang/go1.13.4.linux-amd64.tar.gz
# 解压
tar -zxvf go1.13.4.linux-amd64.tar.gz
编辑 /etc/profile 文件
vim ~/.bashrc
将下面内容加入到末尾(GOPAT是我Windows中的GOPATH)
export GOROOT=/usr/local/go
export GOPATH=/home/pibigstar/goWork
export PATH=$GOPATH/bin:$PATH
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
去这个网址下载:https://github.com/protocolbuffers/protobuf/releases,根据自己的系统,下载对应的文件
解压:
unzip protoc.zip
将bin文件夹下的 protoc 复制到Linux 中的 /bin目录下
sudo cp protoc/bin/protoc /bin/protoc
执行 protoc -verson
如果输出版本信息则证明配置成功
# 下载
git clone https://github.com/golang/protobuf.git
# 进入目录
cd protobuf/protoc-gen-go
# 编译
go install
这个是用来生成
pb
的校验规则文件,也就是*.pb.validate.go
go get -u github.com/envoyproxy/protoc-gen-validate
这个是用来生成让grpc支持http调用的
git clone https://github.com/grpc-ecosystem/grpc-gateway.git
# 安装 protoc-gen-grpc-gateway
cd grpc-gateway/protoc-gen-grpc-gateway
go install .
# 安装protoc-gen-swagger
cd grpc-gateway/protoc-gen-swagger
go install .
这个是用来生成
proto
的文档文件,会生成一个html
格式的文档, 下载地址:https://github.com/pseudomuto/protoc-gen-doc/releases
wget https://github.com/pseudomuto/protoc-gen-doc/releases/download/v1.3.0/protoc-gen-doc-1.3.0.windows-amd64.go1.11.2.tar.gz
# 解压
tar -zxvf protoc-gen-doc-1.3.0.windows-amd64.go1.11.2.tar.gz
可在这个地址下载 protoc-gen-java
工具,https://repo1.maven.org/maven2/io/grpc/protoc-gen-grpc-java/ ,记得把文件名改为protoc-gen-grpc-java.exe
hello.proto
syntax="proto3";
package main;
message Hello {
string value = 1;
}
protoc --go_out=plugins=grpc,paths=source_relative:. --validate_out="lang=go,paths=source_relative:." hello.proto
注意
source_relative
则不会使用option go_package
中指定的路径import
则是使用option go_package
中指定的路径可在这个地址下载
protoc-gen-java
工具,https://repo1.maven.org/maven2/io/grpc/protoc-gen-grpc-java/1.0.1/ ,记得把文件名改为protoc-gen-grpc-java.exe
protoc --java_out=. --grpc-java_out=. hello.proto
protoc --doc_out=. --doc_opt=html,index.html:Ignore* hello.proto user.proto
syntax="proto3";
//生成的pb文件中package为admin
package admin;
//生成go文件的路径
option go_package = "pb/admin";
//关闭Java多文件
option java_multiple_files = false;
//生成的Java文件的package路径
option java_package = "pb.admin";
service UserService {
rpc Login(LoginReq) returns (LoginResp);
}
message LoginReq {
string username = 1;
string password = 2;
}
message LoginResp {
int32 code = 1;
string msg = 2;
}
proto 导入
google/api/annotations.proto
syntax = "proto3";
package pb;
option go_package = "pb/echo";
import "google/api/annotations.proto";
service Echo {
rpc UnaryEcho (EchoRequest) returns (EchoResponse){
option (google.api.http) = {
post: "/v1/example/echo"
body: "*"
};
}
}
// EchoRequest is the request for echo.
message EchoRequest {
string message = 1;
}
// EchoResponse is the response for echo.
message EchoResponse {
string message = 1;
}
下载地址: https://github.com/googleapis/googleapis/tree/master/google
在proto下面将 google的api 放进去
编译时用 -I
命令 引入 extra/src 下面的文件
protoc -I=extra/src:. \
--grpc-gateway_out=logtostderr=true:pb \
--go_out=plugins=grpc,paths=import:pb echo.proto
#!/usr/bin/env bash
TARGET="../"
if [ -n "$1" ]; then
TARGET=$1
fi
# 排除掉 extra/src 目录
for file in `find . -path ./extra/src -prune -o -name '*.proto' -print`;
do
echo $file
protoc -I=extra/src:. --grpc-gateway_out=$TARGET\
--go_out=plugins=grpc,paths=import:$TARGET \
--validate_out="lang=go,paths=import:$TARGET" $file
done