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())
}

运行截图:

posted @   南北丿  阅读(62)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示