arrays - 如何在Golang中将数组文档设置到redis中?

标签 arrays go redis

我在向redis插入文档时遇到问题。

我在 Go 中有一个数据结构:

type ArticleCovers struct {
    ID             int
    Covers         ArticleCovers
    ArticleTypeID  int
    Address        Address     `gorm:"ForeignKey:AddressID"`
}

我想将这样的数据添加到 Redis 中:

[ID:1 Cover:[http://chuabuuminh.vn/UserImages/2012/12/10/1/chinh_dien_jpg.jpg] ArticleTypeID:1 Address:map[Street: City:<nil> District:<nil> DistrictID:0 ID:0 Slug: Lat:0 Long:0 Ward:<nil> WardID:0 CityID:0]] 

但是当我运行 Redis.HMSet("test", structs.Map(ret)) 它返回错误:redis: can't marshal postgresql.ArticleCovers (consider implementing encoding .BinaryMarshaler).

谁能帮我解决我的问题,非常感谢你!

最佳答案

如错误消息所述,您需要实现 BinaryMarshaler ArticleCovers 类型的界面:

type ArticleCovers struct {
    ID             int
    Covers         ArticleCovers
    ArticleTypeID  int
    Address        Address     `gorm:"ForeignKey:AddressID"`
}

func (ac ArticleCovers) MarshalBinary() ([]byte, error) {
    return []byte(fmt.Sprintf("%v-%v", ac.ID, ac.ArticleTypeID)), nil
}

请注意,这只会添加 IDArticleTypeID 字段。我不知道是什么 ArticleCoversAddress 类型看起来很像,但通常您想调用 相同的方法:

func (ac ArticleCovers) MarshalBinary() ([]byte, error) {
    covers, err := ac.Covers.MarshalBinary()
    if err != nil {
        return nil, err
    }
    address, err := ac.Address.MarshalBinary()
    if err != nil {
        return nil, err
    }

    return []byte(fmt.Sprintf("%v-%v-%v-%v",
        ac.ID, ac.ArticleTypeID, covers, address)
}

我不知道这种格式对您的数据是否有意义。你可能想使用 定义编码格式如json。

您可能还想实现 BinaryUnmarshaler 接口(interface)。 这样做留作练习 ;-)

关于arrays - 如何在Golang中将数组文档设置到redis中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44771474/

相关文章:

来自数组的 JavaScript 函数

c++ - 数组乘法任务

java - Java 中的数组 for 循环和 RNG

javascript - Vuex 状态和 vue-router

docker - "exec:\"scripts/script.sh\": stat scripts/script. sh: 没有那个文件或目录

django - 如何在 heroku 服务器中配置 django-celery

erlang - 如何让 Webmachine 和 eredis 一起工作?

go - 如何将排序接口(interface)实现类型作为函数参数传递?

apache - 如何将go服务添加到已在服务PHP的现有Apache服务器中

python-3.x - 将字典键和值添加到 Redis 列表