突发奇想,希望实现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没有输出。有什么办法吗?