安装环境
1:创建目录
mkdir $HOME/Go
mkdir -p $HOME/Go/src/github.com/user # 就是我们创建的GitHub仓库的路径,方便我们以后提交代码。
2:设置环境变量
export GOPATH=$HOME/Go # 项目目录所在的位置
export GOROOT=/usr/local/opt/go/libexec. # Create /usr/local/opt/go/libexec folder if not existed. (mkdir -p /usr/local/opt/go/libexec)
export PATH=$PATH:$GOPATH/bin
export PATH=$PATH:$GOROOT/bin
3:安装go
brew install go
4:"go get" the basics
go get golang.org/x/tools/cmd/godoc
开始创建项目
1:创建项目目录
$mkdir /Users/liaojessica/Go/sparrow_order_gorpc
2:创建account.proto(under sparrow_order_gorpc/sparrow_order_pb/),并使用该文件编译出go文件
syntax = "proto3";
package sparrow_order;
// 定义一个 service
service SparrowOrder {
// jwt 生成
rpc GetUserInfo (UserIDRepuest) returns (UserInfoResponse) {}
}
message UserIDRepuest {
string Phone = 1;
string UserID = 2;
string AppID = 3;
}
message UserInfoResponse {
string Token = 1;
}
操作:
$cd $GOPATH
$go get -u github.com/golang/protobuf/protoc-gen-go
$cd /Users/liaojessica/Go/sparrow_order_gorpc
$protoc --go_out=plugins=grpc:. sparrow_order_pb/account.proto
>>>>>A go file named “account.pb.go” will be generated in /Users/liaojessica/Go/sparrow_order_gorpc/sparrow_order_pb
操作说明:什么是protoc-gen-go
protoc-gen-go是protobuf编译插件系列中的Go版本。从上一小节知道原生的protoc并不包含Go版本的插件,不过可以在github上发现专门的代码库(参见github库)。
由于protoc-gen-go是Go写的,所以安装它变得很简单,只需要运行 go get -u github.com/golang/protobuf/protoc-gen-go
,便可以在$GOPATH/bin目录下发现这个工具。至此,就可以通过下面的命令来使用protoc-gen-go了。
protoc --go_out=output_directory input_directory/file.proto
其中"--go_out="表示生成Go文件,protoc会自动寻找PATH(系统执行路径)中的protoc-gen-go执行文件。
3:创建account_service.go(#under new folder)文件
package sparrow_order_service
import (
"context"
pb "sparrow_order_gorpc/sparrow_order"
)
type SparrowOrderServer struct{}
func (s *SparrowOrderServer) GetUserInfo(ctx context.Context,
in *pb.UserIDRepuest) (*pb.UserInfoResponse, error) {
result := pb.UserInfoResponse{}
result.Token = "Yoho!!!"
return &result, nil
}
4:创建main.go(#under /Users/liaojessica/Go/sparrow_order_gorpc)
package main
import (
cs "sparrow_order_gorpc/sparrow_order_service"
pb "sparrow_order_gorpc/sparrow_order"
"google.golang.org/grpc"
"net"
"fmt"
)
func main() {
port := "8005"
host := "localhost"
listen, err := net.Listen("tcp", ":"+port)
if err != nil {
if err != nil {
fmt.Printf("failed to listen: %v", err)
}
} else {
fmt.Printf("listen: " + host + ":" + port)
}
server := grpc.NewServer()
// 注册 Common
pb.RegisterSparrowOrderServer(server, &cs.SparrowOrderServer{})
// reflection.Register(server)
if err := server.Serve(listen); err != nil {
fmt.Printf("failed to serve: %v", err)
}
}
5: 生成go.mod
$go mod init sparrow_order_gorpc.
#under /Users/liaojessica/Go/sparrow_order_gorpc
#After executing this command, go.mod file will be created with following content.
$cat go.mod
module sparrow_order_gorpc
go 1.12
require (
github.com/golang/protobuf v1.3.1
google.golang.org/grpc v1.21.1
6:开始gRPC service:
$cd /Users/liaojessica/Go/sparrow_order_gorpc_client
$ go run main.go
go: finding google.golang.org/grpc/status latest
go: finding google.golang.org/grpc/codes latest
connting server...connted server: 127.0.0.1:8005jwt=%!(EXTRA string=Yoho!!!)
在保存新代码后,如果想自动build自动重启,可以用 gin
go get github.com/codegangsta/gin
然后运行
gin -i run main.go