SoFunction
Updated on 2025-03-02

Example of golang implementing RPC module

introduction

RPC (Remote Procedure Call) remote procedure call, which allows different processes to communicate on the network, just like calling local functions. In Go language, implementing RPC modules is relatively concise and efficient. This article will introduce in detail how to implement RPC modules in the Go language.

Basics of RPC in Go

The net/rpc package in the Go standard library provides basic support for RPC.

Server side

On the server side, we need to define an object whose methods can be called remotely. These methods must satisfy specific rules: they must be public methods (capsular initials), and must have two parameters, the first parameter is the structure pointer that receives the request, and the second parameter is the structure pointer that returns the result.

Client

The client can call the remote server's methods just like calling a local method, just by establishing a connection and calling the Call method.

Code Example

1. Define RPC Services

First, we define a simple service for performing mathematical operations.

package main

import (
    "errors"
    "net/http"
    "net/rpc"
)

// Args is used to pass request parameterstype Args struct {
    A, B int
}

// MathService Math Operation Servicetype MathService struct{}

// Add addition operationfunc (m *MathService) Add(args *Args, reply *int) error {
    if args == nil {
        return ("invalid arguments")
    }
    *reply =  + 
    return nil
}

func main() {
    // Register service    mathService := new(MathService)
    (mathService)

    // Turn on HTTP service    ()
    err := (":1234", nil)
    if err!= nil {
        panic(err)
    }
}

In the above code, we define a MathService structure where the Add method is used to perform the addition operation. This method receives an Args structure pointer as a parameter and returns the operation result through the reply pointer. In the main function, we register this service and enable an HTTP service to handle RPC requests.

2. Implement the RPC client

package main

import (
    "fmt"
    "log"
    "net/rpc"
)

func main() {
    // Connect to RPC server    client, err := ("tcp", "localhost:1234")
    if err!= nil {
        ("dialing:", err)
    }

    // Prepare the request parameters    args := Args{A: 3, B: 4}
    var reply int

    // Call remote method    err = ("", &args, &reply)
    if err!= nil {
        ("arith error:", err)
    }

    // Output result    ("The result of addition is: %d\n", reply)
}

In the client code, we first connect to the server. Then an Args structure is created and parameter values ​​are set. Next, we call the method to execute the remote Add method and store the result in the reply variable.

Using JSON-RPC

In addition to using Go standard RPC encoding, we can also use JSON-RPC. Just replace with and specify encoding as jsonrpc.

package main

import (
    "errors"
    "log"
    "net/http"
    "net/rpc"
    "net/rpc/jsonrpc"
)

// Args is used to pass request parameterstype Args struct {
    A, B int
}

// MathService Math Operation Servicetype MathService struct{}

// Add addition operationfunc (m *MathService) Add(args *Args, reply *int) error {
    if args == nil {
        return ("invalid arguments")
    }
    *reply =  + 
    return nil
}

func main() {
    // Register service    mathService := new(MathService)
    ("MathService", mathService)

    // Turn on HTTP service    ("/rpc", func(w , r *) {
        (, w, r)
    })

    // Start the service    ((":1234", nil))
}

The client's calling method needs to be slightly modified:

package main

import (
    "fmt"
    "log"
    "net/rpc/jsonrpc"
)

func main() {
    // Connect to RPC server    client, err := ("tcp", "localhost:1234")
    if err!= nil {
        ("dialing:", err)
    }

    // Prepare the request parameters    args := Args{A: 3, B: 4}
    var reply int

    // Call remote method    err = ("", &args, &reply)
    if err!= nil {
        ("arith error:", err)
    }

    // Output result    ("The result of addition is: %d\n", reply)
}

Summarize

Implementing RPC modules in Go is very convenient, whether using standard RPC encoding or JSON-RPC. Through a few simple steps: defining the service, registering the service, opening the server and making calls on the client, we can easily implement remote procedure calls across processes. In practical applications, the appropriate RPC implementation method can be selected according to specific business needs.

This is the end of this article about golang implementing RPC module examples. For more related golang RPC module content, please search for my previous articles or continue browsing the related articles below. I hope everyone will support me in the future!