已默认安装go语言的环境及配置
一.相关资源获取
1.安装grpc和相关插件
//安装grpc
go get -u google.golang.org/grpc
//安装
go get google.golang.org/protobuf/cmd/protoc-gen-go
//安装,用于生成grpc代码
go get google.golang.org/grpc/cmd/protoc-gen-go-grpc
//安装grpc-gateway插件
go get github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway
2.检查环境
(1)在终端执行protoc -version,出现下图则说明配置成功
(2) $GOPATH/bin 目录下有 protoc-gen-go、protoc-gen-go-grpc、protoc-gen-grpc-gateway 这三个可执行文件。
二.编写proto文件
syntax = "proto3"; //语法声明
option go_package="./;pb";
package pb; //包名
// Greeter 微服务
service Greeter {
rpc SayHello(HelloRequest) returns (HelloResponse){
}
}
message HelloRequest{
string name=1;
}
message HelloResponse{
string message=1;
}
三.生成Go stubs,会生成*.pb.go
和*_grpc.pb.go
两个文件
//生成model
protoc --go_out ./pb ./pb/hello.proto
//生成service
protoc --go-grpc_out ./pb ./pb/hello.proto
四.服务端代码
package main
import (
"context"
"log"
"net"
"google.golang.org/grpc"
"google.golang.org/grpc/reflection"
pb "seeker.com/grpcdemo/pb"
)
const (
port = ":50051"
)
type server struct{
pb.UnimplementedGreeterServer
}
func (s *server) SayHello(ctx context.Context , in *pb.HelloRequest)(*pb.HelloResponse , error){
return &pb.HelloResponse{Message: "Hello:" +in.Name},nil;
}
func main(){
lis , err := net.Listen("tcp" , port)
if err != nil{
log.Fatalf("failed to listen :%v" , err)
}
s :=grpc.NewServer();
pb.RegisterGreeterServer(s , &server{})
reflection.Register(s)
if err := s.Serve(lis) ; err != nil{
log.Fatalf("failed to Serve :%v" , err)
}
}
五.客户端代码
package main
import (
"context"
"fmt"
"google.golang.org/grpc"
"os"
"seeker.com/grpcdemo/pb"
"time"
)
const (
address = "localhost:50051"
defaultName = "hapi"
)
func main() {
conn , err :=grpc.Dial(address , grpc.WithInsecure())
if err !=nil{
fmt.Println("did not connect")
}
defer conn.Close()
c :=pb.NewGreeterClient(conn)
name :=defaultName
if len(os.Args) > 1 {
name = os.Args[1]
}
ctx , cancel :=context.WithTimeout(context.Background() , time.Second)
defer cancel()
r ,err :=c.SayHello(ctx , &pb.HelloRequest{Name : name})
if err !=nil {
fmt.Println("34")
}
fmt.Println(r.Message)
}
六.运行效果
总结
写到这里也结束了,在文章最后放上一个小小的福利,以下为小编自己在学习过程中整理出的一个关于 java开发 的学习思路及方向。从事互联网开发,最主要的是要学好技术,而学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯,更加需要准确的学习方向达到有效的学习效果。
由于内容较多就只放上一个大概的大纲,需要更及详细的学习思维导图的 点击我的Gitee获取。
还有 高级java全套视频教程 java进阶架构师 视频+资料+代码+面试题!
全方面的java进阶实践技术资料,并且还有技术大牛一起讨论交流解决问题。