我想知道是否可以直接在源代码中(例如在函数中)使用 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)