【问题标题】:What ways does Go have to easily convert data into bytes or stringsGo 有哪些方法可以轻松将数据转换为字节或字符串
【发布时间】:2012-07-10 08:10:10
【问题描述】:

我一直在使用 Google App Engine Go SDK 开发几个应用程序,这些应用程序使用 Memcache 作为从数据存储区加载数据的缓冲区。由于 Memcache 只能将数据存储为 []byte,我经常发现自己创建了将各种结构编码为字符串的函数,以及反转过程的函数。不用说,当我需要重复这种事情 5 次时,这很乏味。

是否有一种简单的方法可以将可以存储在 Datastore 中的任意结构转换为 []byte 以便将其存储在 Memcache 中,然后将其加载回来,而无需为 GAE Golang 中的各种结构创建自定义代码?

【问题讨论】:

    标签: google-app-engine serialization data-structures memcached go


    【解决方案1】:

    http://golang.org/pkg/encoding/gobhttp://golang.org/pkg/encoding/json 可以将任意数据类型转换为 []byte 切片,因为某些规则适用于被编码的数据结构。您可能希望其中一个 gob 将编码为更小的尺寸,但如果需要,json 更容易与其他语言共享。

    【讨论】:

      【解决方案2】:

      我发现自己也需要同样的东西。所以我创建了一个名为:

      AEGo/ds

      Documentation | Source

      go get github.com/scotch/aego/ds

      它使用与 "appengine/datastore" 相同的 API,因此可以作为替代品使用。

      import "github.com/scotch/aego/v1/ds"
      
      u = &User{Name: "Bob"}
      key := datastore.NewKey(c, "User", "bob", 0, nil)
      key, err := ds.Put(c, key, u)
      
      u = new(User)
      err = ds.Get(c, key, u)
      

      默认情况下,它会将所有Puts 和Gets 缓存到memcache,但您可以通过调用ds.Register 方法来修改此行为:

      ds.Register("User", true, false, false)
      

      Register 方法接受一个代表Kind 的字符串和3 个bool - userDatastoreuseMemcacheuseMemory。传递true 值将导致AEgo/ds 将记录保存到该存储。 Memory 存储对于您不希望更改的记录很有用,但如果您运行的实例不止一个,则可能包含陈旧数据。

      支持的方法有:

      Put
      PutMulti
      Get
      GetMulti
      Delete
      DeleteMulti
      AllocateIDs
      

      注意:目前仅使用Get 进行兑现。 GetMulti 从数据存储中提取。

      AEGo/ds 正在进行中,但代码已经过良好测试。任何反馈将不胜感激。

      为了回答你的问题,我是 serialized the entities to gob 的 memcache 持久性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-02
        • 1970-01-01
        • 2020-02-22
        • 2013-02-09
        • 2022-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多