gob エンコードされたデータをソース コード (関数など) で直接使用できるかどうかを知りたいです。その理由は、gob ファイルを取得するためにディスクにアクセスする必要がなくなるため、パフォーマンスが向上するためです。memcached、redis、および友人を認識しています。TTLやその他の派手な機能は必要ありません。メモリにマップするだけです。データはエンコードされ、「セットアップ」/ビルド プロセスでソース コードにダンプされるため、実行時に「デコード」するだけで済みます。
go アプリケーションは基本的に、小さな読み取り専用の組み込みデータベースとして機能します。jsonを使用してこれを行うことができます(基本的に生のjsonでvarを宣言します)が、パフォーマンスが低下すると思うので、gobで可能かどうか疑問に思っています。
私はさまざまなことを試しましたが、基本的には gob var (byte, [bytes] ?? ) を定義する方法がわからず、デコーダーが io.Reader を期待しているように見えるため、機能させることができません。これについて一日中、私はあなたに少なくともそれが可能かどうか尋ねることにしました。
惨めな試み:
var test string
test = "hello"
p := new(bytes.Buffer)
e := gob.NewEncoder(p)
e.Encode(test)
ers := ioutil.WriteFile("test.gob", p.Bytes(), 0600)
if ers != nil {
panic(ers)
}
次に、test.gob を関数に追加します。ご覧のとおり、test.gob のソースは次のようになっています。^H^L^@^Ehello
var test string
var b bytes.Buffer
b = byte("^H^L^@^Ehello")
de := gob.NewDecoder(b.Bytes())
er := de.Decode(&test)
if er != nil {
fmt.Printf("cannot decode")
panic(er)
}
fmt.Fprintf(w, test)