Apa itu golang Gob

青灯夜游
青灯夜游asal
2023-02-02 17:42:384238semak imbas

gob ialah alat pengekodan/penyahkod untuk siri struktur data yang disertakan dengan pakej Golang digunakan untuk pengekodan dan Penyahkod digunakan untuk penyahkodan. Gob menggunakan antara muka io.Writer untuk mencipta objek Pengekod melalui fungsi NewEncoder() dan memanggil kaedah Encode() untuk melaksanakan operasi pengekodan menggunakan antara muka io.Reader untuk mencipta objek Penyahkod melalui fungsi dan panggilan NewDecoder(). kaedah Decode() untuk melengkapkan operasi penyahkodan.

Apa itu golang Gob

Persekitaran pengendalian tutorial ini: sistem Windows 7, GO versi 1.18, komputer Dell G3.

 Nama penuh gob ialah: Go binary

Golang didatangkan dengan alat pengekodan/penyahkodan bersiri struktur data, yang bermaksud gob boleh bercakap Struktur data dalam go disirikan menjadi sesuatu, dan ia juga boleh dinyahsiri! Kami akan melihat apa yang berubah menjadi siri kemudian sama ada ia bertukar menjadi rentetan atau aliran binari, tidak kira apa yang ia bertukar menjadi.

Apabila menggunakan Gob, kita perlu memberi perhatian kepada objek Pengekod dan Penyahkod Seperti yang dicadangkan oleh namanya, satu digunakan semasa pengekodan dan satu lagi digunakan semasa menyahkod objek dahulu:

Apa itu golang Gob

Apa itu golang Gob

Jadi jelaslah bahawa kedua-dua fungsi ini perlu dipanggil untuk mendapatkan objek Pengekod dan Penyahkod. Ambil perhatian bahawa parameter di sini ialah jenis antara muka io.Writer dan io.Reader Kami memperkenalkan kedua-dua antara muka ini dalam kuliah sebelumnya, jadi parameter yang diperlukan di sini ialah objek yang masing-masing melaksanakan jenis antara muka io.Writer dan io.Reader.

Pengekod dan Penyahkod masing-masing mempunyai satu kaedah utama:

Apa itu golang Gob

Apa itu golang Gob

Melihat di sini kita sudah boleh mendapatkan kesimpulan berikut :

Gob menggunakan antara muka io.Writer, mencipta objek Pengekod melalui fungsi NewEncoder() dan melaksanakan operasi pengekodan dengan memanggil kaedah Encode() menggunakan antara muka io.Reader, mencipta Dekoder objek melalui fungsi NewDecoder() dan Panggil kaedah Decode() untuk menyelesaikan operasi penyahkodan!

Seterusnya, mari cuba gunakan Pengekod dan Penyahkod ini, dan mulakan dengan gob dengan mudah Mari lihat contoh pertama

Contoh 1: Struktur data dan bait. Penukaran Penampan antara. (dikodkan ke dalam kepingan bait)

 1package main
 2
 3import (
 4    "bytes"
 5    "fmt"
 6    "encoding/gob"
 7    "io"
 8)
 9
10//准备编码的数据
11type P struct {
12    X, Y, Z int
13    Name    string
14}
15
16//接收解码结果的结构
17type Q struct {
18    X, Y *int32
19    Name string
20}
21
22func main() {
23    //初始化一个数据
24    data := P{3, 4, 5, "CloudGeek"}
25    //编码后得到buf字节切片
26    buf := encode(data)
27    //用于接收解码数据
28    var q *Q
29    //解码操作
30    q = decode(buf)
31    //"CloudGeek": {3,4}
32    fmt.Printf("%q: {%d,%d}\n", q.Name, *q.X, *q.Y)
33
34}
35
36func encode(data interface{}) *bytes.Buffer {
37    //Buffer类型实现了io.Writer接口
38    var buf bytes.Buffer
39    //得到编码器
40    enc := gob.NewEncoder(&buf)
41    //调用编码器的Encode方法来编码数据data
42    enc.Encode(data)
43    //编码后的结果放在buf中
44    return &buf
45}
46
47func decode(data interface{}) *Q {
48    d := data.(io.Reader)
49    //获取一个解码器,参数需要实现io.Reader接口
50    dec := gob.NewDecoder(d)
51    var q Q
52    //调用解码器的Decode方法将数据解码,用Q类型的q来接收
53    dec.Decode(&q)
54    return &q
55}

Contoh 2: Pensirian dan penyahserikan struktur data ke fail

 1package main
 2
 3import (
 4    "encoding/gob"
 5    "os"
 6    "fmt"
 7)
 8
 9//试验用的数据类型
10type Address struct {
11    City    string
12    Country string
13}
14
15//序列化后数据存放的路径
16var filePath string
17
18func main() {
19    filePath = "./address.gob"
20    encode()
21    pa := decode()
22    fmt.Println(*pa) //{Chengdu China}
23}
24
25//将数据序列号后写到文件中
26func encode() {
27    pa := &Address{"Chengdu", "China"}
28    //打开文件,不存在的时候新建
29    file, _ := os.OpenFile(filePath, os.O_CREATE|os.O_WRONLY, 0666)
30    defer file.Close()
31
32    //encode后写到这个文件中
33    enc := gob.NewEncoder(file)
34    enc.Encode(pa)
35}
36
37//从文件中读取数据并反序列化
38func decode() *Address {
39    file, _ := os.Open(filePath)
40    defer file.Close()
41
42    var pa Address
43    //decode操作
44    dec := gob.NewDecoder(file)
45    dec.Decode(&pa)
46    return &pa
47}

Di atas 2 Setiap contoh tidak sukar I kod yang dialih keluar seperti pengendalian ralat dan cuba sedaya upaya untuk menganotasi setiap keping kod Selepas membaca dua contoh ini dengan sabar, anda seharusnya dapat memahami intipati pengekodan dan penyahkodan gob.

Berdasarkan pemahaman apa itu gob, jika anda perlu menggunakan gob untuk pembangunan, adalah disyorkan untuk membaca dokumentasi rasmi secara terperinci untuk mengetahui butiran lanjut: https://golang.org/pkg/encoding/gob /

[Cadangan berkaitan: Pergi tutorial video, Pengajaran pengaturcaraan]

Atas ialah kandungan terperinci Apa itu golang Gob. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Apakah faedah bahasa goArtikel seterusnya:Apakah faedah bahasa go