GORM: Sirikan bytea kepada rentetan heks

WBOY
Lepaskan: 2024-02-12 16:24:05
ke hadapan
387 orang telah melayarinya

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

Kandungan soalan

Saya mempunyai jadual seperti ini dalam psql:

table transactions (
    hash bytea not null
)
Salin selepas log masuk

Saya ingin mendapatkan data daripada pangkalan data dan mengembalikannya sebagai respons kepada pengguna:

type transaction struct {
    hash []byte `gorm:"column:hash" json:"hash"`
}
Salin selepas log masuk
func getalltransactions(c *gin.context) {
    var transactions []models.transaction
    initializers.database.limit(10).find(&transactions)

    c.json(http.statusok, gin.h{"result": transactions})
}
Salin selepas log masuk

Jawapan:

{
    "result": [
        {
            "hash": "lvei8w7ugvs7s/ay3wuxnbr2s9a+p7b/1l1+6z9k9jg="
        }
    ]
}
Salin selepas log masuk

Tetapi secara lalai hash mempunyai data yang salah, saya ingin mendapatkan sesuatu seperti ini:

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

0x2d5788f30eee815b3bb3f018dd65319db476b3d6be3fb6ffd65d7ee99f4af638
Salin selepas log masuk

Saya cuba membuat scanner / valuer tetapi setakat ini tidak membantu

Penyelesaian

Berdasarkan cadangan cerise limón, saya membuat ini:

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
}
Salin selepas log masuk

Tindak balas menjadi seperti ini:

{
    "result": [
        {
            "hash": "0x2d5788f30eee815b3bb3f018dd65319db476b3d6be3fb6ffd65d7ee99f4af638"
        }
    ]
}
Salin selepas log masuk

Mungkin ada cara yang lebih baik, saya akan gembira melihat cadangan lain

Atas ialah kandungan terperinci GORM: Sirikan bytea kepada rentetan heks. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!