gin返回protobuf,python解析protobuf

go代码

  1. user.proto文件
syntax = "proto3";

option go_package = "./;proto";

message Teacher {
    string name = 1;
    repeated string course = 2;
}

执行命令生成user.pb.go源码
protoc -I . user.proto --go_out=plugins=grpc:.

  1. main.go文件(通过gin框架返回protobuf格式的数据)
package main

import (
	"net/http"

	"github.com/gin-gonic/gin"

	"goRPC/gin_start/06_gin_return_protobuf/proto"
)

func main() {
	r := gin.Default()

	r.GET("/some-protobuf", returnProto)

	r.Run()
}

func returnProto(context *gin.Context) {
	teacher := proto.Teacher{
		Name: "mayanan",
		Course: []string{"python", "go", "微服务"},
	}
	context.ProtoBuf(http.StatusOK, &teacher)
}

运行go服务

python代码

  1. user.proto文件 (同go保持一致)

执行命令生成两个源码文件:user_pb2.py、user_pb2_grpc.py
python -m grpc_tools.protoc --python_out=. --grpc_python_out=. -I. user.proto

  1. test.py文件
    发起请求,解析protobuf格式的数据
import requests

from requests_test.proto import user_pb2
user = user_pb2.Teacher()

rsp = requests.get("http://127.0.0.1:8080/some-protobuf")
print(rsp.text)
user.ParseFromString(rsp.content)
print(user.name, user.course)  # mayanan ['python', 'go', '微服务']
posted @   专职  阅读(289)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示