Golang + Postgres存储Gob数据

时间:2018-11-11 17:58:13

标签: postgresql go gob

我正在尝试使用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中,该数据稍后解密吗?我显然不了解编码过程,也不完全确定从何处开始阅读资源,因此不胜感激!

2 个答案:

答案 0 :(得分:0)

在postgresql中使用bytea列来存储[]byte,然后跳过到string的转换。

答案 1 :(得分:0)

看看https://golang.org/src/encoding/base64/example_test.go

可以使用

return base64.StdEncoding.EncodeToString(buf.Bytes()), nil

已成功存储在数据库中。