go get github.com/dnbsd/jsonrpc
import "github.com/dnbsd/jsonrpc"
builder := jsonrpc.Builder{
Modules: []jsonrpc.Module{
{
Name: "math",
Methods: []jsonrpc.Method{
{
Name: "version",
Handler: func(c *jsonrpc.Context) (any, error) {
return c.Result("v1.0")
},
},
{
Name: "add",
Handler: func(c *jsonrpc.Context) (any, error) {
params, err := c.ParamsArray()
if err != nil {
return c.Error(err)
}
var sum int
for i := range params {
n, err := params.Number(i)
if err != nil {
return c.Error(err)
}
sum += n.Int()
}
return c.Result(sum)
},
},
},
},
},
}
service, err := builder.Build()
if err != nil {
panic(err)
}
req := jsonrpc.NewRequest(1, "math.add", jsonrpc.ParamsArray{10, 20})
resp := service.Call(context.Background(), req)
if resp.Error != nil {
panic(err)
}
println("sum", resp.Result.(int))
MIT