主题
Day 4 — 服务注册与反射调用(Service)
学习目标
通过 Go 的反射机制(reflect 包)实现服务的自动注册和方法调用,让用户只需定义普通的 Go 结构体和方法,即可暴露为 RPC 服务。
核心概念
RPC 方法签名规范
一个合法的 RPC 方法必须满足:
go
func (t *T) MethodName(args ArgType, reply *ReplyType) error- 方法必须是导出的(大写字母开头)
- 恰好 3 个入参(receiver + args + reply)
- 恰好 1 个返回值(error)
- args 和 reply 的类型必须是导出的或内置类型
- reply 必须是指针类型
反射注册流程
newService(rcvr)提取 receiver 的类型名作为服务名registerMethods()遍历所有方法,筛选满足签名规范的方法- 将合法方法存入
map[string]*methodType
与 Server 集成
Server 的 findService("Service.Method") 解析出服务名和方法名,从 serviceMap 中查找对应的 service 和 methodType。
关键代码
| 文件 | 说明 |
|---|---|
service.go | service、methodType、反射注册与调用 |
service_test.go | 注册测试、方法调用测试 |
运行
bash
go run ./day4-service/example/
go test -v -run TestNewService .
go test -v -run TestMethodType .