首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Golang + postgres存储gob数据

Golang + postgres存储gob数据
EN

Stack Overflow用户
提问于 2018-11-12 01:58:13
回答 2查看 2.9K关注 0票数 1

我正在尝试使用encoding/gob将编码后的数据从Golang存储到Postgres。我也在使用Gorm。

代码语言:javascript
复制
if err := json.NewDecoder(r.Body).Decode(model); err != nil {
  http.Error(w, err.Error(), http.StatusBadRequest)
  return
}

目前,postgres数据库中的client_encoding设置为UTF8。下面是我用来编码的代码:

代码语言:javascript
复制
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

据我所知,除非使用gob,否则我不应该将结构编码到db中,在本例中为p。如果我说错了,请纠正我(在我找到这篇文章的时候找不到资源)。

有没有人能告诉我在Postgres中存储这些数据的正确方向,Postgres稍后会被解密?我显然不了解编码过程,也不完全确定从哪里开始阅读资源,所以感谢您的帮助!

EN

回答 2

Stack Overflow用户

发布于 2018-11-12 02:01:11

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

票数 0
EN

Stack Overflow用户

发布于 2018-11-12 04:58:35

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

能够使用

代码语言:javascript
复制
return base64.StdEncoding.EncodeToString(buf.Bytes()), nil

它成功地存储在数据库中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53251572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档