РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1185 of 1593 menu

Функция gob.Register

Функция gob.Register регистрирует конкретный тип данных, чтобы он мог быть корректно передан через поток gob. Первым параметром функция принимает значение типа, который нужно зарегистрировать. Обычно передается нулевое значение типа, например, для структуры передается MyStruct{}. Регистрация необходима при передаче интерфейсных типов, чтобы кодек знал, какую конкретную реализацию использовать при декодировании.

Синтаксис

gob.Register(value)

Пример

Давайте зарегистрируем пользовательскую структуру и передадим ее через gob:

package main import ( "bytes" "encoding/gob" "fmt" "log" ) type Person struct { Name string Age int } func main() { var network bytes.Buffer enc := gob.NewEncoder(&network) dec := gob.NewDecoder(&network) gob.Register(Person{}) data := Person{Name: "Alice", Age: 30} err := enc.Encode(data) if err != nil { log.Fatal(err) } var res Person err = dec.Decode(&res) if err != nil { log.Fatal(err) } fmt.Printf("%+v", res) }

Результат выполнения кода:

{Name:Alice Age:30}

Пример

Давайте зарегистрируем несколько типов, реализующих общий интерфейс:

package main import ( "bytes" "encoding/gob" "fmt" "log" ) type Animal interface { Speak() string } type Dog struct{} func (Dog) Speak() string { return "Woof" } type Cat struct{} func (Cat) Speak() string { return "Meow" } func main() { var network bytes.Buffer enc := gob.NewEncoder(&network) dec := gob.NewDecoder(&network) gob.Register(Dog{}) gob.Register(Cat{}) var animal Animal = Dog{} err := enc.Encode(&animal) if err != nil { log.Fatal(err) } var res Animal err = dec.Decode(&res) if err != nil { log.Fatal(err) } fmt.Println(res.Speak()) }

Результат выполнения кода:

"Woof"

Пример

Давайте зарегистрируем тип с пользовательским именем с помощью gob.RegisterName:

package main import ( "bytes" "encoding/gob" "fmt" "log" ) type Point struct { X int Y int } func main() { var network bytes.Buffer enc := gob.NewEncoder(&network) dec := gob.NewDecoder(&network) gob.RegisterName("MyPoint", Point{}) data := Point{X: 10, Y: 20} err := enc.Encode(data) if err != nil { log.Fatal(err) } var res Point err = dec.Decode(&res) if err != nil { log.Fatal(err) } fmt.Printf("%+v", res) }

Результат выполнения кода:

{X:10 Y:20}

Смотрите также

  • функцию gob.RegisterName,
    которая регистрирует тип с указанным именем
  • функцию gob.NewEncoder,
    которая создает новый кодировщик gob
  • функцию gob.NewDecoder,
    которая создает новый декодировщик gob
  • функцию gob.Encoder.Encode,
    которая кодирует данные в поток gob
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить