1

我正在使用大猩猩 XMLRPC。根据示例,

func (h *HelloService) Say(r     *http.Request, 
                           args  *struct{Who string}, 
                           reply *struct{Message string}) error {
    reply.Message = "Hello, " + args.Who + "!"
    return nil
}

RPC.RegisterService(new(HelloService), "")为我提供服务HelloService.Say()。我想拥有helloService.say()。我能够通过将注册函数修改为RPC.RegisterService(new(HelloService), "helloService"). 但我无法导出小写方法。

我了解 golang 只允许导出大写方法。那么小写方法有什么解决方法吗?

4

2 回答 2

2

我今天遇到了同样的问题。几年前,这个问题在gorilla-xmlrpc 中得到了解决。现在您可以在 xmlrpc 编解码器上注册一个别名:

myCodec := xml.NewCodec()
myCodec.RegisterAlias("MyType.lowerCaseMethod", "MyType.UpperCaseMethod")

带有 eg 的输入<methodName>MyType.lowerCaseMethod</methodName>将按预期被识别。

该功能在 godoc 中有说明,但在项目 README 或相关示例中未提及。

于 2017-01-22T04:44:35.667 回答
1

我认为第一个问题是“为什么需要[小写]”说”,第二个问题需要是,如果需要这样,为什么要使用 Go?

这是一个约定,大写的方法和属性被导出,小写的方法和属性是私有的。

于 2015-04-09T02:40:01.380 回答