Golang + postgres хранит данные гобов - PullRequest
0 голосов
/ 11 ноября 2018

Я пытаюсь сохранить закодированные данные, используя encoding/gob из Голанга, в Postgres. Я тоже использую Горм.

Во-первых, отправка данных формы с использованием

if err := json.NewDecoder(r.Body).Decode(model); err != nil {
  http.Error(w, err.Error(), http.StatusBadRequest)
  return
}

В настоящее время client_encoding установлено в UTF8 в базе данных postgres. Вот что я использую для кодирования:

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, кроме случаев использования gob. Поправьте меня, если я ошибаюсь (не могу найти ресурс в тот момент, когда я нашел это).

Кто-нибудь может указать мне правильное направление для хранения этих данных в Postgres, который расшифровывается позже? Я явно не понимаю процесс кодирования и не совсем уверен, с чего начать здесь, читая ресурсы, поэтому любая помощь приветствуется!

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

взглянул на https://golang.org/src/encoding/base64/example_test.go

смог использовать

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

Который успешно хранится в базе данных.

0 голосов
/ 11 ноября 2018

Используйте столбец bytea в postgresql для хранения []byte и пропустите преобразование в string.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...