Go原生态RPC关于暴露RPC方法rpc.RegisterName的使用的坑
// register RPC service
if err := rpc.RegisterName("Raft", new(raft.Raft)); err != nil {
return err
}
向上面一样,如果我们有 Raft 的结构体,那么 Raft 所有的首字母大写方法集合会全部暴露在 RPC 中。
如果,我们只想暴露一部分,我们可以这样做。
type RaftRPC Raft
...
func (r *RaftRPC) RequestVote(args *RequestVoteArgs, reply *RequestVoteReply) error {
rf := (*Raft)(r)
...
}
...
// register RPC service
if err := rpc.RegisterName("Raft", new(raft.RaftRPC)); err != nil {
return err
}