Maison > développement back-end > Golang > le corps du texte

GORM : sérialiser l'octet en chaîne hexadécimale

WBOY
Libérer: 2024-02-12 16:24:05
avant
407 Les gens l'ont consulté

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

Contenu de la question

J'ai une table comme celle-ci dans psql :

table transactions (
    hash bytea not null
)
Copier après la connexion

Je souhaite récupérer les données de la base de données et les renvoyer en réponse à l'utilisateur :

type transaction struct {
    hash []byte `gorm:"column:hash" json:"hash"`
}
Copier après la connexion
func getalltransactions(c *gin.context) {
    var transactions []models.transaction
    initializers.database.limit(10).find(&transactions)

    c.json(http.statusok, gin.h{"result": transactions})
}
Copier après la connexion

Réponse :

{
    "result": [
        {
            "hash": "lvei8w7ugvs7s/ay3wuxnbr2s9a+p7b/1l1+6z9k9jg="
        }
    ]
}
Copier après la connexion

Mais par défaut hash a des données erronées, je veux obtenir quelque chose comme ceci :

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

0x2d5788f30eee815b3bb3f018dd65319db476b3d6be3fb6ffd65d7ee99f4af638
Copier après la connexion

J'ai essayé de faire scanner / valuer mais jusqu'à présent, cela n'a pas aidé

Solution de contournement

Sur la base de la suggestion de cerise limón, j'ai fait ceci :

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
}
Copier après la connexion

La réponse devient comme ceci :

{
    "result": [
        {
            "hash": "0x2d5788f30eee815b3bb3f018dd65319db476b3d6be3fb6ffd65d7ee99f4af638"
        }
    ]
}
Copier après la connexion

Il existe peut-être une meilleure façon, je serais heureux de voir d'autres suggestions

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal