Go RPC返回值
Go 语言RPC定义格式如下:
func (t *T) MethodName(argType T1, replyType *T2) error
第一个参数是接收的参数,第二个参数是返回给客户端的参数,第二个参数必
须是指针类型的
如果Server端RPC函数返回错误,即error不为nil,第二个参数不会返回任何信息。
例子如下。
server端
package main
import (
"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 = -1
return fmt.Errorf("data format incorrect")
}
this.Sum += i
*r = this.Sum
fmt.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 main
import (
"fmt"
"net"
"net/rpc/jsonrpc"
"time"
)
func main() {
NewJsonRpcSocketClient()
}
func NewJsonRpcSocketClient() {
timeout := time.Second*30
conn, 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 int
err = 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返回值的更多相关文章
- GetLastError()函数返回值及含义
GetLastError返回的值通过在api函数中调用SetLastError或SetLastErrorEx设置.函数并无必要设置上一次错误信息,所以即使一次GetLastError调用返回的是零值, ...
- GetLastError()返回值列表
GetLastError()返回值列表: [0]-操作成功完成.[1]-功能错误.[2]-系统找不到指定的文件.[3]-系统找不到指定的路径.[4]-系统无法打开文件.[5]-拒绝访问.[6]-句柄无 ...
- GetLastError()返回值列表(3259个错误列表)
GetLastError()返回值列表: [0]-操作成功完成. [1]-功能错误. [2]-系统找不到指定的文件. [3]-系统找不到指定的路径. [4]-系统无法打开文件. [5]-拒绝访问. [ ...
- GetLastError返回值含义
GetLastError的返回值的含义: (0)-操作成功完成. (1)-功能错误. (2)- 系统找不到指定的文件. (3)-系统找不到指定的路径. (4)-系统无法打开文件. (5)-拒绝访问. ...
- SpringBoot第十一集:整合Swagger3.0与RESTful接口整合返回值(2020最新最易懂)
SpringBoot第十一集:整合Swagger3.0与RESTful接口整合返回值(2020最新最易懂) 一,整合Swagger3.0 随着Spring Boot.Spring Cloud等微服务的 ...
- socket读写返回值的处理
在调用socket读写函数read(),write()时,都会有返回值.如果没有正确处理返回值,就可能引入一些问题 总结了以下几点 1当read()或者write()函数返回值大于0时,表示实际从缓冲 ...
- Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示
Dapper的牛逼就不扯蛋了,答应群友做个入门Demo的,现有园友需要,那么公开分享一下: 完整Demo:http://pan.baidu.com/s/1i3TcEzj 注 意 事 项:http:// ...
- 由Dapper QueryMultiple 返回数据的问题得出==》Dapper QueryMultiple并不会帮我们识别多个返回值的顺序
异常汇总:http://www.cnblogs.com/dunitian/p/4523006.html#dapper 今天帮群友整理Dapper基础教程的时候手脚快了点,然后遇到了一个小问题,Dapp ...
- C#进阶系列——WebApi 接口返回值不困惑:返回值类型详解
前言:已经有一个月没写点什么了,感觉心里空落落的.今天再来篇干货,想要学习Webapi的园友们速速动起来,跟着博主一起来学习吧.之前分享过一篇 C#进阶系列——WebApi接口传参不再困惑:传参详解 ...
随机推荐
- lvs的FULLNAT
- python day05--字典
一.字典结构 {key:valu} 注意: key必须是不可变(可哈希)的. value没有要求.可以保存任意类型的数据. dic = {123: 456, True: 999, "id&q ...
- 临时调用call()与apply()方法
当在某个局域范围内要调用构造函数中或者其他局域范围内的方法 此时可以用到临时调用方法call与apply 虽然这两个方法都是起临时调用的功能,但是用法不一样 call(obj,val) obj:对象名 ...
- JAVA基础部分复习(四、抽象类与接口)
抽象类与接口的定义: package cn.review.day02; /** * 抽象类 * 定义: * 1.抽象类使用关键字abstract修饰 * 2.抽象方法必须定义在抽象类中,抽象方法没有方 ...
- 牛客OI赛制测试赛2
A题: https://www.nowcoder.com/acm/contest/185/A 链接:https://www.nowcoder.com/acm/contest/185/A来源:牛客网 题 ...
- Java中的Arrays类使用详解
首先先创建一个打印数组的方法,方便后面直接使用 public static void output(int []a) { for(int i=0;i<a.length;i++) { System ...
- SEO : 建站注意
1.url格式.尽可能的短一些,实践证明,较短的url格式还是比较利于搜索引擎收录的. 2.网站前台要纯静态.虽然搜索引擎对静态页面和动态页面并没有本质上的差别对待,但是实践告诉我们静态页面对服务器的 ...
- webservice------UDDI SOAP WSDL 之间的关系
[ 真的是服了一些博客.....啰里啰唆的将一堆== 根本不知道讲的是什么 ... 在描述一个定义之前 (不如先通俗的讲它是干什么的)] SOAP(Simple Object Access P ...
- 第十三次CCF第四题 1803——04 博弈
我又写了一个简洁版的2.0: 可以作为博弈搜索树的模板 : https://www.cnblogs.com/xidian-mao/p/9389974.html 废话ps: 开始觉得这是一道简单得博弈 ...
- HDU 6345:子串查询(前缀和)
子串查询 Time Limit: 3500/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total Sub ...