gRPC golang实践记录
内容参考:
项目结构-项目根目录trip:
go 1.16编写,开启modules,所以创建项目目录后初始化mod:
go mod init trip
生成go.mod
1.编写服务定义
syntax = "proto3"; package trip; option go_package="trip/proto"; // 注意包名,c/s代码编码时import该包名 message helloRequest { string name=1; int64 id=2; } message helloResponse { string res=1; } service helloService{ rpc sayHello(helloRequest)returns(helloResponse){} }
2.生成服务代码
进入proto目录下
protoc -I=. --go_out=plugins=grpc:. hello.proto
自动生成代码后,需要go mod tidy
,然后go mod vendor -v
,目的是生成项目依赖
3.客户端代码
package main import ( "context" "fmt" "google.golang.org/grpc" "log" hellopb "trip/proto" ) func main() { conn, err := grpc.Dial(":50052", grpc.WithInsecure()) if err != nil { log.Fatal(err) } defer conn.Close() client := hellopb.NewHelloServiceClient(conn) res, err := client.SayHello(context.Background(), &hellopb.HelloRequest{Name: "bob123", Id: 1}) if err != nil { log.Fatal(err) } fmt.Println(res) }
4.服务端代码
greeter.go
package greeter import ( "context" "fmt" hellopb "trip/proto" ) type Service struct {} func (*Service) SayHello(c context.Context, req *hellopb.HelloRequest) (*hellopb.HelloResponse, error) { fmt.Println(req.Name, req.Id) return &hellopb.HelloResponse{ Res: req.Name, }, nil }
服务端入口代码
package main import ( "fmt" "google.golang.org/grpc" "net" "trip/greeter" pb "trip/proto" ) const PORT = ":50052" func main() { fmt.Println("grpc serevr starting") lis, err := net.Listen("tcp", PORT) if err != nil { panic(err) } s := grpc.NewServer() pb.RegisterHelloServiceServer(s, &greeter.Service{}) err = s.Serve(lis) if err != nil { panic(err) } }
5.启动服务
先启动服务端,再启动客户端
go run main.go go run grpc_client.go
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
2021-03-15 python3实现数据结构与算法30天-排序-快速排序(7)
2021-03-15 python3实现数据结构与算法30天-排序-插入排序(6)
2021-03-15 python3实现数据结构与算法30天-排序-选择排序(5)