Функция gob.NewEncoder
Функция gob.NewEncoder создает новый кодировщик, который записывает gob представление данных в указанный поток вывода. В качестве параметра функция принимает объект, реализующий интерфейс io.Writer. Возвращаемое значение - указатель на структуру gob.Encoder. Кодировщик используется для преобразования структур, карт, срезов и других типов данных в бинарный формат gob.
Синтаксис
gob.NewEncoder(w io.Writer) *gob.Encoder
Пример
Давайте создадим кодировщик для записи в буфер и закодируем простую строку:
package main
import (
"bytes"
"encoding/gob"
"fmt"
)
func main() {
var buf bytes.Buffer
enc := gob.NewEncoder(&buf)
res := "example string"
err := enc.Encode(res)
if err != nil {
fmt.Println("error:", err)
return
}
fmt.Printf("% x", buf.Bytes())
}
Результат выполнения кода:
"0f ff 81 03 01 02 ff 82 00 01 0c 01 0c 00 00 2d 65 78 61 6d 70 6c 65 20 73 74 72 69 6e 67"
Пример
Давайте закодируем структуру с полями разных типов:
package main
import (
"bytes"
"encoding/gob"
"fmt"
)
type Person struct {
Name string
Age int
Email string
}
func main() {
var buf bytes.Buffer
enc := gob.NewEncoder(&buf)
person := Person{
Name: "John Doe",
Age: 30,
Email: "john@example.com",
}
err := enc.Encode(person)
if err != nil {
fmt.Println("error:", err)
return
}
fmt.Printf("encoded data length: %d bytes", buf.Len())
}
Результат выполнения кода:
"encoded data length: 43 bytes"
Пример
Давайте закодируем срез целых чисел:
package main
import (
"bytes"
"encoding/gob"
"fmt"
)
func main() {
var buf bytes.Buffer
enc := gob.NewEncoder(&buf)
numbers := []int{1, 2, 3, 4, 5}
err := enc.Encode(numbers)
if err != nil {
fmt.Println("error:", err)
return
}
fmt.Println("successfully encoded slice")
}
Результат выполнения кода:
"successfully encoded slice"
Пример
Давайте закодируем структуру с вложенным полем и указателем:
package main
import (
"bytes"
"encoding/gob"
"fmt"
)
type Address struct {
City string
Country string
}
type User struct {
Username string
Address *Address
Active bool
}
func main() {
var buf bytes.Buffer
enc := gob.NewEncoder(&buf)
user := User{
Username: "johndoe",
Address: &Address{
City: "New York",
Country: "USA",
},
Active: true,
}
err := enc.Encode(user)
if err != nil {
fmt.Println("error:", err)
return
}
fmt.Println("encoded data size:", buf.Len())
}
Результат выполнения кода:
"encoded data size: 39"
Смотрите также
-
функцию
gob.NewDecoder,
которая создает новый декодер для чтения gob данных -
функцию
gob.Encoder.Encode,
которая выполняет кодирование данных в gob формат -
функцию
gob.Decoder.Decode,
которая декодирует gob данные в указанную переменную -
функцию
gob.Register,
которая регистрирует пользовательские типы для gob