私は新しいです。PythonでpickleのようにGoで事前計算された変数をロードして保存する方法があるのだろうかと思っていました。
私のコードは、いくつかのデータからマップと配列を作成しています。コードを実行するたびに、それらの計算に時間を費やしたくありません。
コードを実行する次回にマップと配列を直接ロードしたいです。
誰か助けてもらえますか?Go言語での読み込みと保存
TIA :)あなたがファイルに構造体をダンプしたい場合、私は、どのように漬物仕事のことは知らない
私は新しいです。PythonでpickleのようにGoで事前計算された変数をロードして保存する方法があるのだろうかと思っていました。
私のコードは、いくつかのデータからマップと配列を作成しています。コードを実行するたびに、それらの計算に時間を費やしたくありません。
コードを実行する次回にマップと配列を直接ロードしたいです。
誰か助けてもらえますか?Go言語での読み込みと保存
TIA :)あなたがファイルに構造体をダンプしたい場合、私は、どのように漬物仕事のことは知らない
は、あなたが、gob packageを使用し、このHow do I dump the struct into the byte array without reflection?のためのより多くの詳細を見ることができるかもしれません。また
Pythonのpickle https://github.com/hydrogen18/stalecucumberを読み書きできるパッケージが見つかりました。
おそらく、ゴブのパッケージが最も近い: https://golang.org/pkg/encoding/gob/
は、そのファイルを開いて、それらすべてをロード後、一度あなたの変数を計算し、一度ファイルにそれらをすべて保存し、
。
開くファイルがない場合は初めてですので、一度計算して保存してください。
あなたは、"encoding/json"
、"encoding/gob"
、"encoding/csv"
、"encoding/xml"
のように、あなたが好きな場合は、独自のファイル形式を使用するか、またはstandard libraryを使用することができます....
この:
data := calcOnce()
がファイル読み取ります。
rd, err := ioutil.ReadFile(once)
エラーがなければ、すべての変数がロードされます。otherwis eはそれらを1回計算して保存します。ここで
は、作業コードです:1- "encoding/json"
を使用して、The Go Playground上でそれを試してみてください。
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
}
2- "encoding/gob"
を使用して、The Go Playground上でそれを試してみてください。
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
}
3 - プロトタイプ参照:Efficient Go serialization of struct to disk
回答が短すぎる:https://godoc.org/encoding/gob。参照:http://stackoverflow.com/questions/38129076/is-it-possible-to-pickle-instances-of-structs-in-golang –