golang RPC调用中的参数
发布时间:2020-12-16 09:25:26 所属栏目:大数据 来源:网络整理
导读:在RPC处理函数中,我省略了第一个参数,如: func (self Handler) GetName(int,reply *StructObj) {} 并在呼叫方 var reply StructObjclient.Call("Handler.GetName",reply) 因为我不需要GetName方法中的第一个参数,所以我省略了它的名字, 但是,我得到了: gob
在RPC处理函数中,我省略了第一个参数,如:
func (self Handler) GetName(int,reply *StructObj) { } 并在呼叫方 var reply StructObj client.Call("Handler.GetName",&reply) 因为我不需要GetName方法中的第一个参数,所以我省略了它的名字, gob: type mismatch in decoder: want struct type 我将GetName方法更改为GetName(id int,reply * StructObj)并且它可以工作. 解决方法
你在Go中遇到了一个棘手的函数定义语法方面.您不能拥有未命名的参数,并且可以将参数命名为int,而func f(x,y,z Type)是将所有三个变量声明为Type类型的快捷方式.例如,func f(int,x string)违反直觉地声明一个接受两个字符串的f,其中一个恰好被命名为int.
package main import "fmt" func f(int,x string) { fmt.Println("int is:",int) fmt.Println("x is:",x) } func main() { f("foo","bar") } When you run it,输出是 int is: foo x is: bar 是的,这有点令人费解.我从未听过具体的思路解释,但也许他们保留了内置的类型名称,因此他们可以在以后引入新的内置类型而不会破坏已经存在的代码. 无论如何,这意味着你的第一个函数定义实际上并不接受int和* StructObj,而是一个名为int的* StructObj和另一个名为reply的接受.因此来自net / rpc的错误消息实际上意味着客户端在预期* StructObj时传递了0.很有趣. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |