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产品图添加背景
相关推荐
ClouGence10 分钟前
加一张临时表,OceanBase Oracle 写入居然快了 30 倍!程序员雷欧25 分钟前
ThreadPoolExecutor 深度解析:从核心参数到源码实现的全面剖析tju233326 分钟前
信创产业二十年:国产基础软件走到哪一步了?谢尔登34 分钟前
分享一些我常用的Skill东方护航数据恢复(深圳)1 小时前
RAID5单盘故障后阵列状态分析与重建风险评估_东方护航数据恢复深圳店k4m7v2pz1 小时前
macOS 解压 40GB 分卷+中文密码固件镜像的五个深坑与解决方案小白学大数据1 小时前
Python 爬虫实战:抓取汽车之家二手车成交价格与里程数据会编程的土豆1 小时前
GORM 常见操作从入门到能写 DAOA15362552 小时前
2026 电商物流系统推荐:多渠道仓配履约数字化选型指南Jazz_z2 小时前
如何用Python将彩色PDF一键转为黑白(灰度)