Day1 环境安装和配置
1.先去github上下载对应版本的protocol ,使用github镜像网站,避免FQ
网址:https://hub.yzuu.cf/protocolbuffers/protobuf/releases
下载好后,解压到相应目录,将bin文件的地址添加到环境变量的path中,最后在cmd中使用protoc测试。出现以下内容则安装成功
2.下载安装GRPC核心库
在项目中打开terminal,输入go get google.golang.org/grpc即可
配合各个语言的代码生成工具,对于Golang来说称为potoc-gen-go需要安装两个库:
go install google.golang/protobuf/cmd/protoc-gen-go@latest go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
GOBIN must be an absolute path 报错解决办法
使用go env 查看环境变量GOBIN到底是多少
将该路径改为GOPATH下面的bin路径即可
编写protobuf文件
1.新建proto文件,在文件中创建以 .proto结尾的文件
syntax = "proto3"; // 指定proto版本 package hello_grpc; // 指定默认包名 // 指定golang包名 option go_package = "/hello_grpc"; //定义rpc服务 service HelloService { // 定义函数 rpc SayHello (HelloRequest) returns (HelloResponse) {} } // HelloRequest 请求内容 message HelloRequest { string name = 1; string message = 2; } // HelloResponse 响应内容 message HelloResponse{ string name = 1; string message = 2; }
2.然后切换至proto文件的目录下执行命令
protoc --go_out=. hello.proto(文件名)
protoc --go-grpc_out=. hello.proto(文件名)
生成两个go文件
客户端
package main import ( pb "GRPC_study/server/protoc" "context" "fmt" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" "log" ) func main() { addr := ":8080" //使用grpc.Dial创建一个到指定地址的grpc连接 //此处使用不安全的证书来实现SSL//TLS连接 conn, err := grpc.Dial(addr, grpc.WithTransportCredentials(insecure.NewCredentials())) if err != nil { log.Fatal(fmt.Sprintf("grpc connect addr [%s] 连接失败 %s", addr, err)) } defer conn.Close() //初始化客户端 client := pb.NewSayHelloClient(conn) //客户端调用方法 result, err := client.SayHello(context.Background(), &pb.HelloRequest{ Name: "张三", Message: "你好我是张三", }) fmt.Println(result) }
服务端
package main import ( "context" "fmt" "google.golang.org/grpc" "google.golang.org/grpc/grpclog" "net" ) import pb "GRPC_study/server/protoc" // HelloServer1 得有一个结构体,需要实现这个服务的全部方法,叫什么名字不重要 type HelloServer1 struct { pb.UnimplementedSayHelloServer } func (HelloServer1) SayHello(ctx context.Context, request *pb.HelloRequest) (pd *pb.HelloResponse, err error) { fmt.Println("入参:", request.Name, request.Message) pd = new(pb.HelloResponse) pd.Name = "你好" pd.Message = "我这边收到了" return } func main() { //监听端口 listen, err := net.Listen("tcp", ":8080") if err != nil { grpclog.Fatal("Failed to listen: ", err) } //创建一个grpc服务器实例 s := grpc.NewServer() server := HelloServer1{} //将server结构体注册为grpc服务 pb.RegisterSayHelloServer(s, &server) fmt.Println("grpc server running : 8080") //开始处理客户端请求 err = s.Serve(listen) }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!