猿问

存储 Go 编码数据的通用函数

我需要编写一个可以将对象存储为 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 存储在文件中。


30秒到达战场
浏览 214回答 2
2回答

一只甜甜圈

对数据进行编码时,给Encoder一个*interface{},然后就可以用*interface{}解码var to_enc interface{} = ...;god.NewEncoder(...).Encode(&to_enc);...var to_dec interface{}god.NewDecoder(...).Decode(&to_dec);
随时随地看视频慕课网APP

相关分类

Go
我要回答