Go语言中net包RPC远程调用方式有哪些
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍Go语言中net包RPC远程调用方式有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、服务端在代码中,启动了三个服务package mainimport
千家信息网最后更新 2026年11月02日Go语言中net包RPC远程调用方式有哪些
这篇文章主要介绍Go语言中net包RPC远程调用方式有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
一、服务端
在代码中,启动了三个服务
package mainimport ( "log" "net" "net/http" "net/rpc" "net/rpc/jsonrpc" "sync") //go对RPC的支持,支持三个级别:TCP、HTTP、JSONRPC//go的RPC只支持GO开发的服务器与客户端之间的交互,因为采用了gob编码 //注意字段必须是导出type Params struct { Width, Height int} type Rect struct{} //函数必须是导出的//必须有两个导出类型参数//第一个参数是接收参数//第二个参数是返回给客户端参数,必须是指针类型//函数还要有一个返回值errorfunc (r *Rect) Area(p Params, ret *int) error { *ret = p.Width * p.Height return nil} func (r *Rect) Perimeter(p Params, ret *int) error { *ret = (p.Width + p.Height) * 2 return nil} func main() { rect := new(Rect) //注册一个rect服务 rpc.Register(rect) var wg sync.WaitGroup wg.Add(3) go func() { //把服务处理绑定到http协议上 rpc.HandleHTTP() err := http.ListenAndServe(":8080", nil) wg.Wait() if err != nil { log.Fatal(err) defer wg.Done() } }() log.Println("http rpc service start success addr:8080") go func() { tcpaddr, _ := net.ResolveTCPAddr("tcp", "127.0.0.1:8081") tcplisten, err := net.ListenTCP("tcp", tcpaddr) if err != nil { log.Fatal(err) defer wg.Done() } for { conn, err3 := tcplisten.Accept() if err3 != nil { continue } go rpc.ServeConn(conn) } }() log.Println("tcp rpc service start success addr:8081") go func() { tcpaddr, _ := net.ResolveTCPAddr("tcp", "127.0.0.1:8082") tcplisten, err := net.ListenTCP("tcp", tcpaddr) if err != nil { log.Fatal(err) defer wg.Done() } for { conn, err3 := tcplisten.Accept() if err3 != nil { continue } go jsonrpc.ServeConn(conn) } }() log.Println("tcp json-rpc service start success addr:8082") wg.Wait()}二、http客户端
package mainimport ( "net/rpc" "log" "fmt")type Params struct { Width, Height int}func main() { //连接远程rpc服务 rpc, err := rpc.DialHTTP("tcp", "127.0.0.1:8080") if err != nil { log.Fatal(err) } ret := 0; //调用远程方法 //注意第三个参数是指针类型 err2 := rpc.Call("Rect.Area", Params{50, 100}, &ret) if err2 != nil { log.Fatal(err2) } fmt.Println(ret) err3 := rpc.Call("Rect.Perimeter", Params{50, 100}, &ret) if err3 != nil { log.Fatal(err3) } fmt.Println(ret)}三、TCP客户端
package main import ( "net/rpc" "fmt" "log") type Params struct { Width, Height int} func main() { //连接远程rpc服务 //这里使用Dial,http方式使用DialHTTP,其他代码都一样 rpc, err := rpc.Dial("tcp", "127.0.0.1:8081") if err != nil { log.Fatal(err) } ret := 0 //调用远程方法 //注意第三个参数是指针类型 err2 := rpc.Call("Rect.Area", Params{50, 100}, &ret) if err2 != nil { log.Fatal(err2) } fmt.Println(ret) err3 := rpc.Call("Rect.Perimeter", Params{50, 100}, &ret) if err3 != nil { log.Fatal(err3) } fmt.Println(ret)}四、json客户端
package main import ( "fmt" "log" "net/rpc/jsonrpc") type Params struct { Width, Height int} func main() { //连接远程rpc服务 rpc, err := jsonrpc.Dial("tcp", "127.0.0.1:8082") if err != nil { log.Fatal(err) } ret := 0 //调用远程方法 //注意第三个参数是指针类型 err2 := rpc.Call("Rect.Area", Params{150, 100}, &ret) if err2 != nil { log.Fatal(err2) } fmt.Println(ret) err3 := rpc.Call("Rect.Perimeter", Params{150, 100}, &ret) if err3 != nil { log.Fatal(err3) } fmt.Println(ret)}五、运行结果


以上是"Go语言中net包RPC远程调用方式有哪些"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
参数
服务
三个
客户
客户端
类型
指针
方式
方法
支持
语言
代码
内容
函数
篇文章
两个
之间
价值
兴趣
字段
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
湖北九亚互联网络科技有限公司
互联网科技公司经营范围
互联网属科技
科技制造互联网公司
互联网科技小贷
奇酷互联网科技公司
互联网科技论文
奇酷互联网络科技公司
互联网科技缩写
互联网科技公司介绍
互联网科技产品
无锡工业互联网科技有限公司
杭州披云加互联网科技有限公司
互联网营销推广黑科技
互联网科技资金流入
互联网时代科技型公司的机会
唯美互联网科技
福仕德教育科技互联网
长沙易易互联网科技有限公司
广州全民伙伴互联网科技有限公司
互联网是不是新科技
互联网科技缩写
成都玖崟互联网科技有限公司乐商圈怎么样
互联网时代科技改变生活
上海宁丞科技互联网
黑科技闪耀互联网之光
杭州披云加互联网科技有限公司
互联网科技股为什么大涨
广州互联网高科技取餐柜
宁波跨境商互联网科技有限公司