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

relj7zay  于 2023-03-06  发布在  Go
关注(0)|答案(1)|浏览(135)

我在psql中有这样的表:

TABLE transactions (
    hash bytea NOT NULL
)

我想从DB获取数据并将其作为响应返回给用户:
x一个一个一个一个x一个一个二个x
回复:

{
    "result": [
        {
            "hash": "LVeI8w7ugVs7s/AY3WUxnbR2s9a+P7b/1l1+6Z9K9jg="
        }
    ]
}

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

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

0x2d5788f30eee815b3bb3f018dd65319db476b3d6be3fb6ffd65d7ee99f4af638

我尝试过生成Scanner / Valuer,但到目前为止还没有任何帮助

apeeds0o

apeeds0o1#

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"
        }
    ]
}

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

相关问题