我需要编写一个可以将对象存储为 gobjects 的通用函数。func hash_store(data map[string]string) { //initialize a *bytes.Buffer m := new(bytes.Buffer) //the *bytes.Buffer satisfies the io.Writer interface and can //be used in gob.NewEncoder() enc := gob.NewEncoder(m) //gob.Encoder has method Encode that accepts data items as parameter enc.Encode(data) //the bytes.Buffer type has method Bytes() that returns type []byte, //and can be used as a parameter in ioutil.WriteFile() err := ioutil.WriteFile("dep_data", m.Bytes(), 0600) if err != nil { panic(err) } fmt.Printf("just saved all depinfo with %v\n", data) n,err := ioutil.ReadFile("dep_data") if err != nil { fmt.Printf("cannot read file") panic(err) } //create a bytes.Buffer type with n, type []byte p := bytes.NewBuffer(n) //bytes.Buffer satisfies the interface for io.Writer and can be used //in gob.NewDecoder() dec := gob.NewDecoder(p) //make a map reference type that we'll populate with the decoded gob //e := make(map[int]string) e := make(map[string]string) //we must decode into a pointer, so we'll take the address of e err = dec.Decode(&e) if err != nil { fmt.Printf("cannot decode") panic(err) } fmt.Println("after reading dep_data printing ",e)}在这个函数中,我知道要存储在 map[string]string 中的数据类型。但是我需要编写一个通用函数,其中我不知道数据类型,并且仍将其作为 gobject 存储在文件中。
2 回答
一只甜甜圈
TA贡献1836条经验 获得超5个赞
对数据进行编码时,给Encoder一个*interface{},然后就可以用*interface{}解码
var to_enc interface{} = ...;
god.NewEncoder(...).Encode(&to_enc);
...
var to_dec interface{}
god.NewDecoder(...).Decode(&to_dec);
- 2 回答
- 0 关注
- 213 浏览
添加回答
举报
0/150
提交
取消