我正在尝试使用encoding/gob
将编码数据从Golang存储到Postgres中。我也在使用Gorm。
首先,使用发送表单数据
if err := json.NewDecoder(r.Body).Decode(model); err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
当前client_encoding
在postgres数据库中设置为UTF8。这是我用来编码的内容:
type payload struct {
Key []byte
Nonce *[nonceLength]byte
Message []byte
}
// Encrypt message
p.Message = secretbox.Seal(p.Message, plaintext, p.Nonce, key) // key set prior to this
buf := &bytes.Buffer{}
if err := gob.NewEncoder(buf).Encode(p); err != nil {
return nil, err
}
return buf.Bytes(), nil
然后我存储string(buf.Bytes())
,它存储在当前为字符串类型的数据库列中。现在,我是编码方面的新手,我认为gob的数据库使用了不同的编码。我在控制台中收到此错误:
(pq: invalid byte sequence for encoding "UTF8": 0xff)
我一直遵循以下要点进行加密/解密: https://gist.github.com/fuzzyami/f3a7231037166117a6fef9607960aee7
根据我的阅读,除非使用p
,否则我不应该将结构编码为db,在这种情况下为gob
。如果我错了,请更正我(在我找到该资源时找不到资源)。
有人能指出正确的方向将该数据存储在Postgres中,该数据稍后解密吗?我显然不了解编码过程,也不完全确定从何处开始阅读资源,因此不胜感激!
答案 0 :(得分:0)
在postgresql中使用bytea
列来存储[]byte
,然后跳过到string
的转换。
答案 1 :(得分:0)
看看https://golang.org/src/encoding/base64/example_test.go
可以使用
return base64.StdEncoding.EncodeToString(buf.Bytes()), nil
已成功存储在数据库中。