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产品图添加背景
相关推荐
卷无止境6 小时前
RAGFlow 项目全景报告:从文档解析引擎到 Agent 原生数据库苏宸啊6 小时前
MySQL(一)2603_969694857 小时前
JDBC 基础学习笔记:API 核心原理解析与 CRUD 代码实操这个DBA有点耶7 小时前
库内语义构建 vs 外挂向量库:业务语义缺失,才是RAG“胡说八道”的根源灿飞屋7 小时前
Kotlin与Java虚拟机三:控制流benchmark_cc7 小时前
单只股票五档盘口接入个人研究仓库:QuantDash 读取、校验与易错点kobe_OKOK_8 小时前
mysql 开启 binlog 日志鸽芷咕9 小时前
KingbaseES 调参先看执行计划,参数是答案不是起点青少儿编程课堂9 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:中缀表达式求值解析这个DBA有点耶9 小时前
MySQL 8.0直方图:统计信息升级了,执行计划为什么还是选错?