首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python “无缝” 调用 Go 代码

Python “无缝” 调用 Go 代码

作者头像
小田测测看
发布2026-06-17 17:58:45
发布2026-06-17 17:58:45
570
举报

什么是RPC

RPC(Remote Procedure Call),即远程过程调用。它允许像调用本地服务一样调用远程服务。

RPC是一种服务器-客户端(Client/Server)模式,经典实现是一个通过发送请求-接受回应进行信息交互的系统。

RPC 让远程调用就像本地调用一样,其调用过程可拆解为以下步骤。

rpc
rpc

实际运用

当某些功能用 Go 实现更高效,而业务主逻辑又依赖 Python 时,需要一种 “在 Python 中像调用自定义函数一样调用 Go 代码” 的方案。这种需求能通过多种方式实现,既保留 Go 的性能优势,又兼顾 Python 的易用性,现在讲基于rpc方式来实现

案例演示

代码语言:javascript
复制
import socket
import json

request = {
    "id": 0,
    "params": [{"x":1, "y":2}],  # 参数对应上Args结构体
    "method": "ServiceA.Add"
}

client = socket.create_connection(("127.0.0.1", 9091),5)
client.sendall(json.dumps(request).encode())

rsp = client.recv(1024)
rsp = json.loads(rsp.decode())
print(rsp)

go代码如下

代码语言:javascript
复制
package main
import (
    "log"
    "net"
    "net/rpc"
    "net/rpc/jsonrpc"
)
type Args struct {
    X, Y int
}


type ServiceA struct{}

func (s *ServiceA) Add(args *Args, reply *int) error {
    *reply = args.X + args.Y
    returnnil
}
func main() {
    service := new(ServiceA)
    rpc.Register(service)
    l, e := net.Listen("tcp", ":9091")
    if e != nil {
        log.Fatal("listen error:", e)
    }
    for {
        conn, _ := l.Accept()
        rpc.ServeCodec(jsonrpc.NewServerCodec(conn))
    }
}

Go 端将功能封装为 RPC 服务(如ServiceA.Add),监听端口;Python 端通过网络请求(遵循 RPC 协议)传递参数,获取返回值,代码层面只需构造参数和解析结果

#Python #Rpc #Go

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-11-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程拾光 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是RPC
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档