go根据字符动态设置结构体字段名--hprose rpc应用

DavidSun2014 2018-12-03 05:48:12

问题的由来RPC

//服务端设置
type TestServer struct{
}
func (t *TestServer) Foo (data map[string]interface{})string{
//do thing...
}
func (t *TestServer) Bar (data map[string]interface{})string{
//do thing...
}
var test *TestServer
srv.AddAllMethods(test) //srv type is *rpc.TCPServer

//客户端调用
type Test struct{
?? func(map[string]interface{}) string
}
var test *Test
client := rpc.NewClient("ip")
client.UseService(&test)

test . ?? ( data ) //data type is map

?? 可能是Foo或者Bar,根据前端传递字符而定,如何动态生成这样的结构体字段并调用?


这几天,用hprose-golang开发微服务网关,碰到了这个问题,在PHP里很容易解决,但是在golang里一直卡在这里。
...全文
411 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
DavidSun2014 2018-12-04
  • 打赏
  • 举报
回复
客户端如果与服务端一至的话,就不存在这个问题了,为了保障服务端接口定义及命名的灵活性,其接口是不一样的。所以有这个问题存在,在hprose的文档里有一个invoking方法,这个方法能实现要求,但是传入的参数比较麻烦,使用了反射reflect,效率比较低。
qybao 2018-12-04
  • 打赏
  • 举报
回复
客户端和服务端的interface应该一致的吧
如果想动态,可以用函数指针,不过也要if else

2,190

社区成员

发帖
与我相关
我的任务
社区描述
go语言学习与交流版
社区管理员
  • go语言社区
  • Freeman Z
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧