Помимо хорошо известных 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, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»