首页 > 后端开发 > Golang > GORM:将 bytea 序列化为十六进制字符串

GORM:将 bytea 序列化为十六进制字符串

WBOY
发布: 2024-02-12 16:24:05
转载
430 人浏览过

GORM:将 bytea 序列化为十六进制字符串

问题内容

我在 psql 中有这样的表:

table transactions (
    hash bytea not null
)
登录后复制

我想从数据库获取数据并将其作为对用户的响应返回:

type transaction struct {
    hash []byte `gorm:"column:hash" json:"hash"`
}
登录后复制
func getalltransactions(c *gin.context) {
    var transactions []models.transaction
    initializers.database.limit(10).find(&transactions)

    c.json(http.statusok, gin.h{"result": transactions})
}
登录后复制

回应:

{
    "result": [
        {
            "hash": "lvei8w7ugvs7s/ay3wuxnbr2s9a+p7b/1l1+6z9k9jg="
        }
    ]
}
登录后复制

但是默认情况下hash有错误的数据,我想得到这样的东西:

SELECT '0x' || encode(hash::bytea, 'hex') AS hash_hex FROM transactions LIMIT 1;

0x2d5788f30eee815b3bb3f018dd65319db476b3d6be3fb6ffd65d7ee99f4af638
登录后复制

我尝试制作 scanner / valuer,但到目前为止还没有帮助

解决方法

根据cerise limón的建议,我做了这个:

type hexbytes []byte

type transaction struct {
    hash              hexbytes `gorm:"column:hash" json:"hash"`
}

func (b hexbytes) marshaljson() ([]byte, error) {
    hexstr := hex.encodetostring(b)
    return []byte(`"0x` + hexstr + `"`), nil
}
登录后复制

响应变成这样:

{
    "result": [
        {
            "hash": "0x2d5788f30eee815b3bb3f018dd65319db476b3d6be3fb6ffd65d7ee99f4af638"
        }
    ]
}
登录后复制

也许有更好的方法,我很高兴看到其他建议

以上是GORM:将 bytea 序列化为十六进制字符串的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:stackoverflow.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板