Go 语言RPC定义格式如下:

func (t *T) MethodName(argType T1, replyType *T2) error

第一个参数是接收的参数,第二个参数是返回给客户端的参数,第二个参数必
须是指针类型的

如果Server端RPC函数返回错误,即error不为nil,第二个参数不会返回任何信息。

例子如下。

server端

package mainimport ("fmt""net""net/rpc""net/rpc/jsonrpc"
)type Counter struct {Sum int
}func (this *Counter) Add(i int, r *int) error {if i < 0 {*r = -1return fmt.Errorf("data format incorrect")}this.Sum += i*r = this.Sumfmt.Printf("i: %v\n", i)return nil
}func NewJsonRpcSocketServer() {rpc.Register(new(Counter))l, err := net.Listen("tcp", ":3333")if err != nil {fmt.Printf("Listener tcp err: %s", err)return}for {fmt.Println("wating...")conn, err := l.Accept()if err != nil {fmt.Sprintf("accept connection err: %s\n", conn)}go jsonrpc.ServeConn(conn)}}func main() {NewJsonRpcSocketServer()
}

server端对于参数小于0的情况,返回错误, 并把repoy设置为-1。

client端

package mainimport ("fmt""net""net/rpc/jsonrpc""time"
)func main() {NewJsonRpcSocketClient()
}func NewJsonRpcSocketClient() {timeout := time.Second*30conn, err := net.DialTimeout("tcp", "127.0.0.1:3333", timeout)if err != nil {fmt.Printf("create client err:%s\n", err)return}defer conn.Close()client := jsonrpc.NewClient(conn)var reply interr = client.Call("Counter.Add", -10, &reply)if err != nil {fmt.Println("error:", err, "reply:", reply)return}fmt.Printf("reply: %d, err: %v\n", reply, err)}

client端传入参数小于0,此时client output:

error: data format incorrect reply: 0

reply仍然是默认值,server端设置的信息没有返回给client。
结果得到验证。

Go rpc调用的返回值相关推荐

  1. python函数+定义+调用+多返回值+匿名函数+lambda+高级函数(reduce、map、filter)

    python函数+定义+调用+多返回值+匿名函数+lambda+高级函数(reduce.map.filter) Python 中函数的应用非常广泛,比如 input() .print().range( ...

  2. SpringMVC中通过@ResponseBody返回对象,Js中调用@ResponseBody返回值,统计剩余评论字数的js,@RequestParam默认值,@PathVariable的用法

    1.SpringMVC中通过@ResponseBody返回对象,作为JQuery中的ajax返回值 package com.kuman.cartoon.controller; import java. ...

  3. Thrift解读(五)——server端RPC接收与返回值的回送

    Thrift框架主要分为四层:Service,Protocol,Transport,Server.前述介绍的TNonBlockingServer就是一种Server,除此之外,还有很多别的Server ...

  4. python怎么调用函数的返回值类型,10、Python基础之函数的调用与返回值

    一.函数参数 1.1 不定长参数 当我们定义函数时,可能需要定义一个函数能处理比当初声明时更多的参数,这些参数叫做不定长参数. 我们可以在形参前面加上一个 * ,这样这个形参就可以获取所有的实参,它将 ...

  5. java exe 返回值_java调用exe返回值

    {// getAccount 方法,使用 get 方法; return accounts.get(index); } } Bank .java: package com.mybank.domain; ...

  6. 整理sqlserver 级联更新和删除 c#调用存储过程返回值

    整理一下级联更新和删除 c#调用返回值 use master go IF exists(select 1 from sysdatabases where name='temp') BEGIN DROP ...

  7. java调用c 返回值_推荐--Linux平台下Java调用C函数(补充关于String类型函数返回值)...

    平台介绍 系统:ubuntu10.04 jdk:Java(TM) SE Runtime Environment (build 1.6.0_20-b02) gcc:gcc version 4.4.3 ( ...

  8. dapper 调用 存储过程返回值_数据库事务、存储过程、函数以及触发器之间的区别和联系...

    一.[事务概念] 事务(Transaction)是指构成单一逻辑工作单元的操作集合,要么完整地执行,要么完全不执行. 1,如果事务中有的操作没有成功完成,则事务中的所有操作都需要被回滚,回到事务执行前 ...

  9. 关于jQuery方法间调用的返回值问题

    若x方法含有return false,y方法中调用x方法,在调用y方法时并不会像java里一样停止运行,y方法依然会执行下去 若想x方法停止执行时,y方法也停止执行,应先获取x方法的返回值加以判断,根 ...

最新文章

  1. 使用PHP-GTK编写一个windows桌面应用程序
  2. 分布式系统优势及衡量指标
  3. 阿里云发布迁移解决方案,“迁移上云”这件事有专业的人做
  4. 网站设置404错误页
  5. 微信中打开h5页面,直接关闭窗口js
  6. linux程序流量平滑,Linux下按程序查实时流量 network traffic(示例代码)
  7. C4D四视图切换及基本操作
  8. 微软云服务器搭建,75分钟快速构建微软Server 2012私有云
  9. www.xttblog.com尚硅谷Java视频教程_SpringBoot视频教程
  10. Win10 AMD610显卡驱动安装出现错误206安装失败
  11. 弗洛伊德:本我、自我和超我
  12. XSuperNEST套料引擎
  13. android fresco 圆角,圆角和圆圈
  14. windows禁用屏幕旋转_如何在Windows 10中禁用屏幕自动旋转
  15. 前端.什么是冒泡和阻止冒泡的原因和方法
  16. RAID和LVM介绍、练习
  17. 用vue-cli创建项目后npm run serve 报错Component name “main“ should always be multi-word vue/multi-word-compo
  18. LiteOS学习笔记-5通信模组之LiteOS的SAL及socket编程
  19. 每周资讯 | 三星成为加拿大Telus5G设备供应商、高通发布骁龙690处理器、诺基亚与博通合作开发5G芯片……...
  20. 硬件部分第二次培训——中断详解

热门文章

  1. oracle字符串转换浮点数,c#中将字符串转换成带2位小数的浮点数
  2. b、B、KB、Kib、MB、MiB、GB、GiB、TB、TiB的区别
  3. linux p2p download tools
  4. 基于RoCE v1配置PFC
  5. windows中盘符的概念
  6. 黑马前端笔记1--HTML(1)
  7. 最新医疗系统三测单控件(体温单控件)
  8. 什么设备升级android9,三星设备安卓9.0升级路线图更新:共30款
  9. docker ubuntu容器安装ping工具
  10. JB的测试之旅-关于线上问题的看法