Golang RPC 编码自定义函数
Posted
技术标签:
【中文标题】Golang RPC 编码自定义函数【英文标题】:Golang RPC encode custom function 【发布时间】:2017-03-26 15:46:48 【问题描述】:我正在尝试使用 github.com/dullgiulio/pingo
并发送我的自定义结构
type LuaPlugin struct
Name string
List []PluginTable
type PluginTable struct
Name string
F lua.LGFunction
// LoadPlugins walks over the plugin directory loading all exported plugins
func LoadPlugins()
//
p := pingo.NewPlugin("tcp", "plugins/test")
// Actually start the plugin
p.Start()
// Remember to stop the plugin when done using it
defer p.Stop()
gob.Register(&LuaPlugin)
gob.Register(&PluginTable)
var resp *LuaPlugin
// Call a function from the object we created previously
if err := p.Call("MyPlugin.SayHello", "Go developer", &resp); err != nil
log.Print(err)
else
log.Print(resp.List[0])
但是,对于 ym 结构的 F
字段,我总是得到 nil
。这是我在客户端发送的内容
// Create an object to be exported
type MyPlugin struct
// Exported method, with a RPC signature
func (p *MyPlugin) SayHello(name string, msg *util.LuaPlugin) error
//
//
*msg = util.LuaPlugin
Name: "test",
List: []util.PluginTable
Name: "hey",
F: func(L *lua.LState) int
log.Println(L.ToString(2))
return 0
,
,
,
return nil
不能通过 RPC 发送自定义数据类型吗?
【问题讨论】:
【参考方案1】:不过,我不熟悉该库,您可以尝试在传输之前将结构转换为字节片。迟到的回复,可能对其他人有帮助....
简单转换:以字节形式返回结构
func StructToBytes(s interface) (converted []byte, err error)
var buff bytes.Buffer
encoder := gob.NewEncoder(&buff)
if err = encoder.Encode(s); err != nil
return
converted = buff.Bytes()
return
解码器:返回一个包装器将字节解码成
func Decoder(rawBytes []byte) (decoder *gob.Decoder)
reader := bytes.NewReader(rawBytes)
decoder = gob.NewDecoder(reader)
return
例子:
type MyStruct struct
Name string
toEncode := MyStruct"John Doe"
// convert the struct to bytes
structBytes, err := StructToBytes(toEncode)
if err != nil
panic(err)
//-----------
// send over RPC and decode on other side
//-----------
// create a new struct to decode into
var DecodeInto MyStruct
// pass the bytes to the decoder
decoder := Decoder(structBytes)
// Decode into the struct
decoder.Decode(&DecodeInto)
fmt.Println(DecodeInto.Name) // John Doe
由于使用了 gob 包,您可以在一定程度上交换类型和类型转换。
更多信息请见:https://golang.org/pkg/encoding/gob/
【讨论】:
以上是关于Golang RPC 编码自定义函数的主要内容,如果未能解决你的问题,请参考以下文章