encoding/gob
генерирует двоичные данные из Go значений. Результат не для текстового представления, поэтому вы не должны рассматривать его как string
, а как серию байтов, например []byte
.
Тем не менее, не используйте Buffer.String()
, а скорее Buffer.Bytes()
, если вы должны получить закодированные данные.
Вот пример кодирования и декодирования значения string
с использованием encoding/gob
:
// ENCODE
var network bytes.Buffer
encoder := gob.NewEncoder(&network)
valueToEncode := "Hello, 世界"
if err := encoder.Encode(valueToEncode); err != nil {
panic(err)
}
gobData := network.Bytes() // Save / serialize this byte slice
// DECODE
network2 := bytes.NewBuffer(gobData)
decoder := gob.NewDecoder(network2)
var decoded string
if err := decoder.Decode(&decoded); err != nil {
panic(err)
}
fmt.PrintTln(decoded)
Вывод (попробуйте на Go Playground ):
Hello, 世界
Также обратите внимание, что если вы собираетесь записать закодированные данные в сетевое соединение или файл, вы не нужно bytes.Buffer
, вы можете напрямую кодировать их. Если вы должны использовать bytes.Buffer
, вы также можете использовать его метод Buffer.WriteTo()
для записи его содержимого в io.Writer
(например, файл или сетевое соединение).