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产品图添加背景
相关推荐
XCDoris2 小时前
郴州logo设计机构gCode Teacher 格码致知2 小时前
Pandas教学-17:Series与Dataframe的关系zyseo83 小时前
谷歌SEO 准首页词挖掘脚本:找出排在第 8-20 名的隐藏流量马良神笔3 小时前
2026 年Rag最近技术前沿总结不像程序员的程序媛4 小时前
maven基础xiaogai_gai5 小时前
仅查询策略实战:从金蝶云·星空旗舰版定时拉取收料通知单小天源5 小时前
从 Nginx 日志到访问分析:轻量化网站监测服务的架构实践数据工匠老o5 小时前
异构数据库DDL同步:260条链路的结构变更自动适配方案benchmark_cc5 小时前
Python 量化系统如何设计统一的数据访问接口:从策略解耦到数据层架构const_qiu6 小时前
第四章 00:开篇 —— 从「会聊天」到「记得住、会干活、能协作」