Go 的 net/rpc 默认基于自定义二进制协议,不支持直接通过 HTTP curl 调用;但启用 rpc/jsonrpc 后可暴露 JSON-RPC 1.0 接口,此时可通过 curl 发送标准 JSON-RPC 请求与 Go RPC 服务交互。 go 的 `net/rpc` 默认基于自定义二进制协议,不支持直接通过 http curl 调用;但启用 `rpc/jsonrpc` 后可暴露 json-rpc 1.0 接口,此时可通过 curl 发送标准 json-rpc 请求与 go rpc 服务交互。Go 标准库的 net/rpc 包默认使用私有、基于 TCP 的二进制编码协议(Gob),不兼容 HTTP 协议栈,因此无法直接用 curl 发起常规 HTTP 请求(如 GET/POST)进行调用。这也是你执行 curl -X CONNECT --url localhost:1234/_goRPC 时收到 404 Not Found 的根本原因:该端点并非 HTTP 服务器,而是一个裸 TCP RPC 服务,不理解 HTTP 方法或路径语义。? 正确路径是切换至 net/rpc/jsonrpc 子包------它在保持 net/rpc 服务逻辑不变的前提下,将传输层封装为 JSON-RPC 1.0 格式,并通过标准 HTTP(通常是 POST)承载。注意:虽然协议名为 JSON-RPC,但 Go 的 jsonrpc 实现实际复用 HTTP 连接,且要求使用 POST 方法(非 CONNECT),这是社区常见误区。? 正确的 curl 调用方式(JSON-RPC 1.0)假设你已按如下方式启动了 JSON-RPC 服务(关键:使用 jsonrpc.ServeConn 或 http.HandlerFunc 包装):// server.gopackage mainimport ( "log" "net" "net/http" "net/rpc" "net/rpc/jsonrpc")type Args struct{ A, B int }type Arith intfunc (t *Arith) Multiply(r *Args, ret *int) error { *ret = r.A * r.B return nil}func main() { rpc.Register(new(Arith)) rpc.HandleHTTP() // 注意:此行注册 /_goRPC 路径(仅对 jsonrpc 有效) listener, _ := net.Listen("tcp", ":1234") log.Println("RPC server listening on :1234") http.Serve(listener, nil)}此时服务监听 :1234,并通过 / _goRPC 路径提供 JSON-RPC 接口(由 rpc.HandleHTTP() 自动注册)。你可使用以下 curl 命令调用 Arith.Multiply 方法: Mokker AI AI产品图添加背景
相关推荐
风哥2号3 小时前
数据库教程FGMT27‑MySQL数据库基础知识与体系架构qq5918406853 小时前
uiautomator2自动化安卓手机操作80s7773 小时前
动态代理和静态代理的区别,动态代理怎么提高网络安全性YangYang9YangYan4 小时前
2026 校招商品分析岗位 JD 拆解,核心指标、工具与面试考点Flynt4 小时前
Java 27 升级实测:默认值动得比新特性多,有个老参数会让 JVM 直接起不来西安栈上月明软件科技5 小时前
从业务黑话到本体图谱:OAG本体建模五步法(西安老系统AI化改造实战)anxiao_m5 小时前
跨云跨机房大数据迁移怎么选?不同场景工具适配指南niucloud-admin5 小时前
JAVA V6 多商户商城 开发文档——job 计划任务开发小叶肥辉5 小时前
LangChain链和LangGraph图的学习笔记【三】——分别用langchain_openai库和langchain_community库调用大模型2401_873479406 小时前
IP属地为什么有时显示外省?用IP查询工具核查动态分配、运营商出口与GeoIP库