Serialization 用Go语言加载和存储
我是新手,想知道是否有办法在Python中的Go-like pickle中加载和存储预计算的变量。Serialization 用Go语言加载和存储,serialization,go,marshalling,Serialization,Go,Marshalling,我是新手,想知道是否有办法在Python中的Go-like pickle中加载和存储预计算的变量。 我的代码正在从一些数据创建一个映射和一个数组,我不想每次代码运行时都花时间计算这些数据。 我想在下次运行代码时直接加载该映射和数组。 有人能帮我吗 TIA:)我不知道pickle是如何工作的,如果您想将结构转储到文件中,可能您可以使用,请参阅更多详细信息 此外,我还发现了一个可以读写Python pickle的包。也许gob包是最接近的: 计算变量一次,然后将它们全部保存在一个文件中, 然后打开该
我的代码正在从一些数据创建一个映射和一个数组,我不想每次代码运行时都花时间计算这些数据。
我想在下次运行代码时直接加载该映射和数组。
有人能帮我吗
TIA:)我不知道pickle是如何工作的,如果您想将结构转储到文件中,可能您可以使用,请参阅更多详细信息
此外,我还发现了一个可以读写Python pickle的包。也许gob包是最接近的:
计算变量一次,然后将它们全部保存在一个文件中,
然后打开该文件并全部加载。
没有要打开的文件时,这是第一次,请计算并保存一次。
如果您喜欢,您可以使用自己的文件格式,或者使用,比如
这:
data := calcOnce()
读取文件:
rd, err := ioutil.ReadFile(once)
如果没有错误,则加载所有变量,否则计算并保存一次
以下是工作代码:
1-使用“encoding/json”
,在以下设备上试用:
2-使用
“encoding/gob”
,试穿:
3-有关协议,请参见:太短,无法回答:。另见:
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
)
type Data struct {
A [2]int
B map[int]string
}
func main() {
data := calcOnce()
fmt.Println(data) // {[101 102] map[1:Hello 2:World.]}
}
func calcOnce() Data {
const once = "date.json"
rd, err := ioutil.ReadFile(once)
if err != nil {
//calc and save once:
data := Data{[2]int{101, 102}, map[int]string{1: "Hello ", 2: "World."}}
buf, err := json.Marshal(data)
if err != nil {
panic(err)
}
//fmt.Println(string(buf))
err = ioutil.WriteFile(once, buf, 0666)
if err != nil {
panic(err)
}
return data
}
var d *Data
err = json.Unmarshal(rd, &d)
if err != nil {
panic(err)
}
return *d
}
package main
import (
"bytes"
"encoding/gob"
"fmt"
"io/ioutil"
)
type Data struct {
A [2]int
B map[int]string
}
func main() {
data := calcOnce()
fmt.Println(data) // {[1010 102] map[2:World. 1:Hello ]}
}
func calcOnce() Data {
const once = "date.bin"
rd, err := ioutil.ReadFile(once)
if err != nil {
//calc and save once:
data := Data{[2]int{101, 102}, map[int]string{1: "Hello ", 2: "World."}}
buf := &bytes.Buffer{}
err = gob.NewEncoder(buf).Encode(data)
if err != nil {
panic(err)
}
err = ioutil.WriteFile(once, buf.Bytes(), 0666)
if err != nil {
panic(err)
}
return data
}
var d Data
err = gob.NewDecoder(bytes.NewReader(rd)).Decode(&d)
if err != nil {
panic(err)
}
return d
}