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

Функция gob.RegisterName

Функция gob.RegisterName из пакета encoding/gob регистрирует конкретный тип данных, чтобы его можно было кодировать и декодировать с помощью gob, используя при этом пользовательское имя вместо имени типа. В первый параметр передается строка с желаемым именем типа, во второй параметр передается значение типа (обычно передается нулевое значение или переменная нужного типа). Эта функция особенно полезна в ситуациях, когда имя типа в коде может измениться, а необходимо сохранить совместимость с ранее закодированными данными.

Синтаксис

gob.RegisterName(name, value)

Пример

Давайте зарегистрируем тип User с пользовательским именем "CustomUser" и закодируем его в gob:

package main import ( "bytes" "encoding/gob" "fmt" ) type User struct { ID int Name string } func main() { gob.RegisterName("CustomUser", User{}) var buf bytes.Buffer enc := gob.NewEncoder(&buf) user := User{ID: 1, Name: "Alice"} err := enc.Encode(user) if err != nil { fmt.Println("Error:", err) return } fmt.Printf("Encoded data size: %d bytes\n", buf.Len()) }

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

"Encoded data size: 28 bytes"

Пример

Давайте зарегистрируем тип Point под именем "Coordinate" и выполним полный цикл кодирования и декодирования:

package main import ( "bytes" "encoding/gob" "fmt" ) type Point struct { X int Y int } func main() { gob.RegisterName("Coordinate", Point{}) var buf bytes.Buffer enc := gob.NewEncoder(&buf) dec := gob.NewDecoder(&buf) original := Point{X: 10, Y: 20} err := enc.Encode(original) if err != nil { fmt.Println("Encode error:", err) return } var decoded Point err = dec.Decode(&decoded) if err != nil { fmt.Println("Decode error:", err) return } fmt.Printf("%+v\n", decoded) }

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

"{X:10 Y:20}"

Пример

Если тип зарегистрирован с пользовательским именем, то при декодировании можно использовать любое имя, зарегистрированное в системе, например, "Coordinate":

package main import ( "bytes" "encoding/gob" "fmt" ) type Point struct { X int Y int } func main() { gob.RegisterName("Coordinate", Point{}) var buf bytes.Buffer enc := gob.NewEncoder(&buf) original := Point{X: 5, Y: 7} enc.Encode(original) dec := gob.NewDecoder(&buf) var decoded Point dec.Decode(&decoded) fmt.Println(decoded.X) fmt.Println(decoded.Y) }

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

"5" "7"

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

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