Gorilla xmlrpc的小写方法

时间:2015-04-08 16:44:04

标签: go gorilla

我正在使用Gorilla 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只允许导出大写方法。那么小写方法有没有解决方法呢?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

 var helper = require('sendgrid').mail
 var sg = require('sendgrid')(process.env.SENDGRID_API_KEY);

 var email = {

    send: function(emSubject, senderMail, message, callback){

            var from_email = new helper.Email(senderMail);
            var to_email = new helper.Email('btnysci@yahoo.com');
            var subject = emSubject;
            var content = new helper.Content("text/plain", message);
            var mail = new helper.Mail(from_email, subject, to_email, content);

            var request = sg.emptyRequest({
              method: 'POST',
              path: '/v3/mail/send',
              body: mail.toJSON()
            });
            console.dir("request");
            console.dir(JSON.stringify(request, null, 4));

            sg.API(request, function(error, response) {
              if(error){
                console.log(error);
              }     
              console.log(response.statusCode)
              console.log(response.body)
              console.log(response.headers)
              callback(error);
            });

    }
 }

 module.exports = email;

输入例如myCodec := xml.NewCodec() myCodec.RegisterAlias("MyType.lowerCaseMethod", "MyType.UpperCaseMethod") 将被视为预期。

此函数在godoc中注明,但未在项目README或相关示例中提及。