分享
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。
突发奇想,希望实现struct的函数或者属性,指向某个方法,并序列化,但报错,想知道是否可行?
测试代码如下:
```Go
//测试方法的持久化
func Test1(t *testing.T){
F :=func(){
fmt.Println("这只是个测试")
}
src :=Foo{
Cache:2,
InnerFunc:F,
}
//正常运行
src.Do()
src.Do2()
var buf bytes.Buffer
enc:=gob.NewEncoder(&buf)
dec:=gob.NewDecoder(&buf)
enc.Encode(src)
var funcdst Foo
err:=dec.Decode(&funcdst)
if err!=nil{
t.Error(err)
}
//正常运行
funcdst.Do()
//发现并没有输出,因为InnerFunc==nil
funcdst.Do2()
}
type Foo struct{
Cache int
InnerFunc func()
}
func (f *Foo)Do(){
fmt.Println(f.Cache,"Foo do!")
}
func (f *Foo)Do2(){
if f.InnerFunc!=nil{
f.InnerFunc()
}
}
```
运行时,发现反序列化之后,Foo的InnerFunc属性是空值,因此Do2没有输出。有什么办法吗?
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信1979 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传