Heim >Backend-Entwicklung >Golang >GORM: Bytea in Hex-String serialisieren

GORM: Bytea in Hex-String serialisieren

WBOY
WBOYnach vorne
2024-02-12 16:24:05447Durchsuche

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

Frageninhalt

Ich habe eine Tabelle wie diese in psql:

table transactions (
    hash bytea not null
)

Ich möchte Daten aus der Datenbank abrufen und sie als Antwort an den Benutzer zurückgeben:

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})
}

Antwort:

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

Aber standardmäßig hat hash falsche Daten, ich möchte so etwas erhalten:

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

0x2d5788f30eee815b3bb3f018dd65319db476b3d6be3fb6ffd65d7ee99f4af638

Ich habe versucht, scanner / valuer zuzubereiten, aber bisher hat es nicht geholfen.

Abhilfe

Basierend auf dem Vorschlag von cerise limón habe ich Folgendes gemacht:

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
}

Die Antwort sieht so aus:

{
    "result": [
        {
            "hash": "0x2d5788f30eee815b3bb3f018dd65319db476b3d6be3fb6ffd65d7ee99f4af638"
        }
    ]
}

Vielleicht gibt es einen besseren Weg, ich würde mich über weitere Vorschläge freuen

Das obige ist der detaillierte Inhalt vonGORM: Bytea in Hex-String serialisieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen