Метод 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,
который регистрирует типы для безопасного декодирования