
Frageninhalt
Ich habe eine Tabelle wie diese in psql:
1 2 3 | table transactions (
hash bytea not null
)
|
Nach dem Login kopieren
Ich möchte Daten aus der Datenbank abrufen und sie als Antwort an den Benutzer zurückgeben:
1 2 3 | type transaction struct {
hash []byte `gorm: "column:hash" json: "hash" `
}
|
Nach dem Login kopieren
1 2 3 4 5 6 | func getalltransactions(c *gin.context) {
var transactions []models.transaction
initializers.database.limit(10).find(&transactions)
c.json(http.statusok, gin.h{ "result" : transactions})
}
|
Nach dem Login kopieren
Antwort:
1 2 3 4 5 6 7 | {
"result" : [
{
"hash" : "lvei8w7ugvs7s/ay3wuxnbr2s9a+p7b/1l1+6z9k9jg="
}
]
}
|
Nach dem Login kopieren
Aber standardmäßig hat hash
falsche Daten, ich möchte so etwas erhalten:
1 2 3 | SELECT '0x' || encode(hash::bytea, 'hex' ) AS hash_hex FROM transactions LIMIT 1;
0x2d5788f30eee815b3bb3f018dd65319db476b3d6be3fb6ffd65d7ee99f4af638
|
Nach dem Login kopieren
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:
1 2 3 4 5 6 7 8 9 10 | 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
}
|
Nach dem Login kopieren
Die Antwort sieht so aus:
1 2 3 4 5 6 7 | {
"result" : [
{
"hash" : "0x2d5788f30eee815b3bb3f018dd65319db476b3d6be3fb6ffd65d7ee99f4af638"
}
]
}
|
Nach dem Login kopieren
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!