宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取

云计算

本篇内容介绍了“go rpc的基本使用方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

服务端

package mainimport (“fmt””net””net/rpc””net/rpc/jsonrpc””os””os/exec””reflect””time””github.com/agiledragon/gomonkey”)type Mock struct {}func (m *Mock) MockFunc(name string, reply *int) error {gomonkey.ApplyMethod(reflect.TypeOf(&exec.Cmd{}), “Output”, func(c *exec.Cmd) ([]byte, error) {return []byte(c.String()), nil})*reply = 1000fmt.Println(“name=>”, name)return nil}func test() {cmd := &exec.Cmd{}b, err := cmd.Output()fmt.Println(b, err)}func main() {go A()time.Sleep(time.Minute)}func A() {mock := new(Mock)rpc.Register(mock)tcpAddr, err := net.ResolveTCPAddr(“tcp”, “:1234”)if err != nil {fmt.Println(“Fatal error “, err.Error())os.Exit(1)}listener, err := net.ListenTCP(“tcp”, tcpAddr)if err != nil {fmt.Println(“Fatal error “, err.Error())os.Exit(1)}for {conn, err := listener.Accept()if err != nil {continue}jsonrpc.ServeConn(conn)}}

客户端

package mainimport (“fmt””log””net/rpc/jsonrpc”)func main() {client, err := jsonrpc.Dial(“tcp”, “127.0.0.1:1234”)if err != nil {log.Fatal(“dialing:”, err)}var reply interr = client.Call(“Mock.MockFunc”, “exec.Cmd”, &reply)if err != nil {log.Fatal(“arith error:”, err)}fmt.Println(reply)}

“go rpc的基本使用方法”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注新网,小编将为大家输出更多高质量的实用文章!