Помимо хорошо известных JSON и XML, Go также предлагает бинарный формат — gob. В данной инструкции описывается базовый концепт использования пакета gob из encoding.
Как сериализовать структуру в бинарный формат gob?
1. Создайте файл gob.go со следующим содержимым:
Рекомендуем вам супер TELEGRAM канал по Golang где собраны все материалы для качественного изучения языка. Удивите всех своими знаниями на собеседовании! 😎
Мы публикуем в паблике ВК и Telegram качественные обучающие материалы для быстрого изучения Go. Подпишитесь на нас в ВК и в Telegram. Поддержите сообщество Go программистов.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
package main import ( "bytes" "encoding/gob" "fmt" ) type User struct { FirstName string LastName string Age int Active bool } func (u User) String() string { return fmt.Sprintf(`{"FirstName":%s,"LastName":%s,"Age":%d,"Active":%v }`, u.FirstName, u.LastName, u.Age, u.Active) } type SimpleUser struct { FirstName string LastName string } func (u SimpleUser) String() string { return fmt.Sprintf(`{"FirstName":%s,"LastName":%s}`, u.FirstName, u.LastName) } func main() { var buff bytes.Buffer // Кодирование значения enc := gob.NewEncoder(&buff) user := User{ "Radomir", "Sohlich", 30, true, } enc.Encode(user) fmt.Printf("%X\n", buff.Bytes()) // Декодирование значения out := User{} dec := gob.NewDecoder(&buff) dec.Decode(&out) fmt.Println(out.String()) enc.Encode(user) out2 := SimpleUser{} dec.Decode(&out2) fmt.Println(out2.String()) } |
2. Запустите код через go run gob.go;
3. Посмотрите на результат в терминале:
|
1 2 3 |
40FF81030101045573657201FF82000104010946697273744E616D65010C0001084C6173744E616D65010C0001034167650104000106416374697665010200000019FF8201075261646F6D69720107536F686C696368013C010100 {"FirstName":Radomir,"LastName":Sohlich,"Age":30,"Active":true } {"FirstName":Radomir,"LastName":Sohlich} |
Пакет encoding/gob для сериализации данных в бинарный формат
Для сериализации и десериализации бинарных данных gob нужен энкодер и декодер. Функция gob.NewEncoder создает Encoder с базовым Writer. Каждый вызов метода Encode сериализует объект в бинарный формат gob. Формат gob является самоописывающим бинарным форматом. Это значит, что перед каждой сериализованной структурой есть ее описание.
Для декодирования данных из сериализированной формы, декодер должен создаваться через вызов gob.NewDecoder с базовым Reader. Затем метод Decode принимает указатель на структуру, куда нужно десериализировать данные.
Обратите внимание, что бинарный формат
gobне требует, чтобы тип источника и тип назначения совпадали.

Администрирую данный сайт с целью распространения как можно большего объема обучающего материала для языка программирования Go. В IT с 2008 года, с тех пор изучаю и применяю интересующие меня технологии. Проявляю огромный интерес к машинному обучению и анализу данных.
E-mail: vasile.buldumac@ati.utm.md
Образование
Технический Университет Молдовы (utm.md), Факультет Вычислительной Техники, Информатики и Микроэлектроники
- 2014 — 2018 Universitatea Tehnică a Moldovei, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
- 2018 — 2020 Universitatea Tehnică a Moldovei, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»