Maison >développement back-end >Golang >GORM : sérialiser l'octet en chaîne hexadécimale
J'ai une table comme celle-ci dans psql :
table transactions ( hash bytea not null )
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"` }
func getalltransactions(c *gin.context) { var transactions []models.transaction initializers.database.limit(10).find(&transactions) c.json(http.statusok, gin.h{"result": transactions}) }
Réponse :
{ "result": [ { "hash": "lvei8w7ugvs7s/ay3wuxnbr2s9a+p7b/1l1+6z9k9jg=" } ] }
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
J'ai essayé de faire scanner / valuer
mais jusqu'à présent, cela n'a pas aidé
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 }
La réponse devient comme ceci :
{ "result": [ { "hash": "0x2d5788f30eee815b3bb3f018dd65319db476b3d6be3fb6ffd65d7ee99f4af638" } ] }
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!