gpt4 book ai didi

gob 编码到/从 *os.File 解码不工作

转载 作者:数据小太阳 更新时间:2023-10-29 03:35:46 26 4
gpt4 key购买 nike

当我使用文件指针时 f *os.File 我得到一个空映射

func decode(f *os.File, b map[string]interface{}) error {
err := gob.NewDecoder(f).Decode(&b)
fmt.Printf("%+v\n", b)
return err
}

func encode(f *os.File, b map[string]interface{}) error {
bb := map[string]interface{}{
"X": 1,
"Greeting": "hello",
}
err := gob.NewEncoder(f).Encode(bb)
f.Sync()
//fmt.Println(buf.Bytes())
return err
}

打印 map[]

如果我将其替换为全局缓冲区指针 buf *bytes.Buffer 它会起作用

func decode(f *os.File, b map[string]interface{}) error {
err := gob.NewDecoder(buf).Decode(&b)
fmt.Printf("%+v\n", b)
return err
}

func encode(f *os.File, b map[string]interface{}) error {
bb := map[string]interface{}{
"X": 1,
"Greeting": "hello",
}
err := gob.NewEncoder(buf).Encode(bb)
return err
}

打印 map[Greeting:hello X:1]

f在main中是这样打开的

var (
buf *bytes.Buffer
f *os.File
memcache map[string]interface{}
)

func main() {
var err error
f, err = os.Create("_memcache.txt")
if err != nil {
log.Print(err.Error())
}
defer f.Close()

memcache = make(map[string]interface{})
buf = new(bytes.Buffer)
gob.Register(map[string]interface{}{})
err = write()
if err != nil {
log.Print(err.Error())
}
err = read()
if err != nil {
log.Print(err.Error())
}
}

func read() (err error) {
err = decode(f, memcache)
if err != nil && err != io.EOF {
return err
}
}

func write() (err error) {
err = encode(f, memcache)
if err != nil {
return err
}
}

最佳答案

解决办法已经在评论中提到了,所以更新方法main()如下:

func main() {
var err error
f, err = os.Create("_memcache.txt")
if err != nil {
log.Print(err.Error())
}
defer f.Close()

memcache = make(map[string]interface{})
buf = new(bytes.Buffer)
gob.Register(map[string]interface{}{})

err = write()
if err != nil {
log.Print(err.Error())
}

// after write the file pointer is at the end of the file,
// so it should be moved:
f.Seek(0, 0)

// alternatively, open the file in read()
err = read()
if err != nil {
log.Print(err.Error())
}
}

关于gob 编码到/从 *os.File 解码不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31480167/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com