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

Метод gob.Decoder.Decode

Метод gob.Decoder.Decode выполняет декодирование данных формата gob, полученных от соответствующего Encoder, в переданную переменную. В качестве единственного параметра метод принимает указатель на переменную, в которую будет сохранен результат декодирования. Метод возвращает ошибку error, если декодирование не удалось.

Синтаксис

decoder.Decode(&v)

Пример

Давайте создадим декодер на основе буфера с gob-данными и декодируем его в структуру:

package main import ( "bytes" "encoding/gob" "fmt" ) type User struct { ID int Name string Email string } func main() { var network bytes.Buffer enc := gob.NewEncoder(&network) data := User{ID: 1, Name: "John", Email: "john@example.com"} err := enc.Encode(data) if err != nil { fmt.Println("Encode error:", err) return } dec := gob.NewDecoder(&network) var res User err = dec.Decode(&res) if err != nil { fmt.Println("Decode error:", err) return } fmt.Printf("ID: %d, Name: %s, Email: %s", res.ID, res.Name, res.Email) }

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

"ID: 1, Name: John, Email: john@example.com"

Пример

Давайте декодируем gob-данные в слайс строк:

package main import ( "bytes" "encoding/gob" "fmt" ) func main() { var network bytes.Buffer enc := gob.NewEncoder(&network) original := []string{"a", "b", "c", "d", "e"} err := enc.Encode(original) if err != nil { fmt.Println("Encode error:", err) return } dec := gob.NewDecoder(&network) var res []string err = dec.Decode(&res) if err != nil { fmt.Println("Decode error:", err) return } fmt.Println(res) }

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

[a b c d e]

Пример

Давайте декодируем gob-данные в карту с числовыми ключами:

package main import ( "bytes" "encoding/gob" "fmt" ) func main() { var network bytes.Buffer enc := gob.NewEncoder(&network) original := map[int]string{1: "one", 2: "two", 3: "three"} err := enc.Encode(original) if err != nil { fmt.Println("Encode error:", err) return } dec := gob.NewDecoder(&network) var res map[int]string err = dec.Decode(&res) if err != nil { fmt.Println("Decode error:", err) return } fmt.Println(res) }

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

map[1:one 2:two 3:three]

Пример

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

package main import ( "bytes" "encoding/gob" "fmt" ) type User struct { ID int Name string } func main() { var network bytes.Buffer enc := gob.NewEncoder(&network) err := enc.Encode("invalid data") if err != nil { fmt.Println("Encode error:", err) return } dec := gob.NewDecoder(&network) var res User err = dec.Decode(&res) if err != nil { fmt.Println("Decode failed:", err) return } fmt.Println("Decoded:", res) }

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

"Decode failed: gob: type mismatch: no fields matched compiling decoder for User"

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

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