Функция gob.NewDecoder

Функция gob.NewDecoder создает новый декодер, который читает данные в формате gob из переданного потока ввода. В качестве параметра она принимает интерфейс io.Reader, из которого будут читаться закодированные данные. Возвращает она указатель на структуру Decoder.

Синтаксис

gogob.NewDecoder(r io.Reader) *Decoder

Пример

Давайте создадим декодер для чтения данных из буфера:

gopackage main

import (
  "bytes"
  "encoding/gob"
  "fmt"
)

type Person struct {
  Name string
  Age  int
}

func main() {
  var buf bytes.Buffer
  
  // Кодируем данные в буфер
  enc := gob.NewEncoder(&buf)
  person := Person{Name: "Alice", Age: 30}
  enc.Encode(person)
  
  // Создаем декодер для чтения из буфера
  dec := gob.NewDecoder(&buf)
  
  // Декодируем данные
  var res Person
  dec.Decode(&res)
  
  fmt.Printf("%+v", res)
}

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

go{Name:Alice Age:30}

Пример

Давайте прочитаем несколько закодированных значений из одного потока:

gopackage main

import (
  "bytes"
  "encoding/gob"
  "fmt"
)

func main() {
  var buf bytes.Buffer
  
  // Кодируем несколько значений
  enc := gob.NewEncoder(&buf)
  enc.Encode("first")
  enc.Encode("second")
  enc.Encode("third")
  
  // Создаем декодер
  dec := gob.NewDecoder(&buf)
  
  // Декодируем каждое значение
  var res string
  dec.Decode(&res)
  fmt.Printf("%q", res)
  dec.Decode(&res)
  fmt.Printf("%q", res)
  dec.Decode(&res)
  fmt.Printf("%q", res)
}

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

go"first""second""third"

Пример

Давайте прочитаем данные из файла с помощью декодера:

gopackage main

import (
  "encoding/gob"
  "fmt"
  "os"
)

type Data struct {
  ID  int
  Value string
}

func main() {
  // Открываем файл для чтения
  file, _ := os.Open("data.gob")
  defer file.Close()
  
  // Создаем декодер
  dec := gob.NewDecoder(file)
  
  // Декодируем данные
  var res Data
  dec.Decode(&res)
  
  fmt.Printf("%+v", res)
}

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

go{ID:1 Value:example}

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

  • функцию gob.NewEncoder,
    которая создает кодировщик для записи данных в формате gob
  • функцию gob.Decoder.Decode,
    которая выполняет декодирование данных из потока
  • функцию gob.Register,
    которая регистрирует пользовательские типы для кодирования
  • функцию json.NewDecoder,
    которая создает декодер для чтения данных в формате JSON