This is an implementation of client-side part of XML-RPC protocol in Go.
Add dependency to your project:
go get -u alexejk.io/go-xmlrpcUse it by creating an *xmlrpc.Client and firing RPC method calls with Call().
package main
import(
"fmt"
"alexejk.io/go-xmlrpc"
)
func main() {
client, _ := xmlrpc.NewClient("https://bugzilla.mozilla.org/xmlrpc.cgi")
result := &struct {
BugzillaVersion struct {
Version string
}
}{}
_ = client.Call("Bugzilla.version", nil, result)
fmt.Printf("Version: %s\n", result.BugzillaVersion.Version)
}Customization is supported by passing a list of Option to the NewClient function.
For instance:
- To customize any aspect of
http.Clientused to perform requests, useHttpClientoption, otherwisehttp.DefaultClientwill be used - To pass custom headers, make use of
Headersoption.
Arguments to the remote RPC method are passed on as a *struct. This struct is encoded into XML-RPC types based on following rules:
- Order of fields in struct type matters - fields are taken in the order they are defined on the type.
- Numbers are to be specified as
int(encoded as<int>) orfloat64(encoded as<double>) - Both pointer and value references are accepted (pointers are followed to actual values)
Response is decoded following similar rules to argument encoding.
- Order of fields is important.
- Outer struct should contain exported field for each response parameter.
- Structs may contain pointers - they will be initialized if required.
To build this project, simply run make all.
If you prefer building in Docker instead - make build-in-docker is your friend.