go创建一个grpc并运行起来
创建项目
创建go mod项目
在Goland中安装Protobuf插件
创建文件夹目录文件
首先创建一个 hello_grpc.pb文件
// 固定模板格式
syntax = "proto3";
option go_package="./;hello_grpc"; // 包名
package hell_grpc;
message Req {
string message = 1;
}
message Res {
string message = 1;
}
service HelloGRPC{
rpc SayHi(Req) returns (Res); // 返回方式固定一个放入参 一个放出参
}
安装两个依赖
go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2
go get google.golang.org/grpc
问题:Windows系统下,执行完两条go install可能还不够,还要自己再下载protoc.exe,然后把这个执行文件也放到GOPATH/bin下,这样才可以proto文件编译,下载网址https://github.com/protocolbuffers/protobuf/releases/tag/v3.9.0
保证GOPATH\bin目录下有这几个文件
创建自动生成代码的脚本,bulid.bat,需要修改的地方就是将需要运行的代码放在当前目录下
protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative ./hello_grpc.proto // 将最后的部分修改成文件所在的位置
脚本运行完成后即可生成两个go代码
Protocol Buffers
官网 grpc.io 使用说明
https://blog.csdn.net/Aliven888/article/details/126976525
proto安装配置
下载链接:https://github.com/protocolbuffers/protobuf/releases/
解压后,配置环境变量在系统变量 PATH中添加上protobuf的路径
验证是否安装成功,在cmd中验证 注意:可以需要重启一下电脑,配置的环境才可能生效
protoc --version
编写服务端和客户端
脑图
server
package main
import (
"context"
"fmt"
"google.golang.org/grpc"
hello_grpc "grpc-start/grpc_class/pb"
"net"
)
type server struct {
hello_grpc.UnimplementedHelloGRPCServer
}
func (s *server) SayHi(ctx context.Context, req *hello_grpc.Req) (*hello_grpc.Res, error) {
fmt.Println(req.GetMessage())
return &hello_grpc.Res{Message: "我是从服务端返回的grpc内容"}, nil
}
func main() {
// 创建监听
l, err := net.Listen("tcp", ":8888") // 使用 ":8888" 表示在所有可用 IP 地址上监听 8888 端口
if err != nil {
fmt.Printf("Failed to listen: %v\n", err)
return
}
// 创建服务器
s := grpc.NewServer()
hello_grpc.RegisterHelloGRPCServer(s, &server{})
defer s.Stop() // 在程序退出时关闭服务器
fmt.Println("Server started, listening on :8888")
if err := s.Serve(l); err != nil {
fmt.Printf("Failed to serve: %v\n", err)
return
}
}
client
package main
import (
"context"
"fmt"
"google.golang.org/grpc"
hello_grpc "grpc-start/grpc_class/pb"
)
func main() {
// 创建连接
conn, err := grpc.Dial("localhost:8888", grpc.WithInsecure()) // 设置安装属性
if err != nil {
fmt.Printf("Failed to connect: %v\n", err)
return
}
defer conn.Close()
// 创建客户端实例
client := hello_grpc.NewHelloGRPCClient(conn)
// 调用方法
req := &hello_grpc.Req{Message: "我从客户端来"}
res, err := client.SayHi(context.Background(), req)
if err != nil {
fmt.Printf("Failed to call SayHi: %v\n", err)
return
}
fmt.Println(res.GetMessage())
}
运行截图:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!