Go rpc调用的返回值
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调用的返回值相关推荐
- python函数+定义+调用+多返回值+匿名函数+lambda+高级函数(reduce、map、filter)
python函数+定义+调用+多返回值+匿名函数+lambda+高级函数(reduce.map.filter) Python 中函数的应用非常广泛,比如 input() .print().range( ...
- SpringMVC中通过@ResponseBody返回对象,Js中调用@ResponseBody返回值,统计剩余评论字数的js,@RequestParam默认值,@PathVariable的用法
1.SpringMVC中通过@ResponseBody返回对象,作为JQuery中的ajax返回值 package com.kuman.cartoon.controller; import java. ...
- Thrift解读(五)——server端RPC接收与返回值的回送
Thrift框架主要分为四层:Service,Protocol,Transport,Server.前述介绍的TNonBlockingServer就是一种Server,除此之外,还有很多别的Server ...
- python怎么调用函数的返回值类型,10、Python基础之函数的调用与返回值
一.函数参数 1.1 不定长参数 当我们定义函数时,可能需要定义一个函数能处理比当初声明时更多的参数,这些参数叫做不定长参数. 我们可以在形参前面加上一个 * ,这样这个形参就可以获取所有的实参,它将 ...
- java exe 返回值_java调用exe返回值
{// getAccount 方法,使用 get 方法; return accounts.get(index); } } Bank .java: package com.mybank.domain; ...
- 整理sqlserver 级联更新和删除 c#调用存储过程返回值
整理一下级联更新和删除 c#调用返回值 use master go IF exists(select 1 from sysdatabases where name='temp') BEGIN DROP ...
- 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 ( ...
- dapper 调用 存储过程返回值_数据库事务、存储过程、函数以及触发器之间的区别和联系...
一.[事务概念] 事务(Transaction)是指构成单一逻辑工作单元的操作集合,要么完整地执行,要么完全不执行. 1,如果事务中有的操作没有成功完成,则事务中的所有操作都需要被回滚,回到事务执行前 ...
- 关于jQuery方法间调用的返回值问题
若x方法含有return false,y方法中调用x方法,在调用y方法时并不会像java里一样停止运行,y方法依然会执行下去 若想x方法停止执行时,y方法也停止执行,应先获取x方法的返回值加以判断,根 ...
最新文章
- 使用PHP-GTK编写一个windows桌面应用程序
- 分布式系统优势及衡量指标
- 阿里云发布迁移解决方案,“迁移上云”这件事有专业的人做
- 网站设置404错误页
- 微信中打开h5页面,直接关闭窗口js
- linux程序流量平滑,Linux下按程序查实时流量 network traffic(示例代码)
- C4D四视图切换及基本操作
- 微软云服务器搭建,75分钟快速构建微软Server 2012私有云
- www.xttblog.com尚硅谷Java视频教程_SpringBoot视频教程
- Win10 AMD610显卡驱动安装出现错误206安装失败
- 弗洛伊德:本我、自我和超我
- XSuperNEST套料引擎
- android fresco 圆角,圆角和圆圈
- windows禁用屏幕旋转_如何在Windows 10中禁用屏幕自动旋转
- 前端.什么是冒泡和阻止冒泡的原因和方法
- RAID和LVM介绍、练习
- 用vue-cli创建项目后npm run serve 报错Component name “main“ should always be multi-word vue/multi-word-compo
- LiteOS学习笔记-5通信模组之LiteOS的SAL及socket编程
- 每周资讯 | 三星成为加拿大Telus5G设备供应商、高通发布骁龙690处理器、诺基亚与博通合作开发5G芯片……...
- 硬件部分第二次培训——中断详解