>  기사  >  백엔드 개발  >  골랑곱이란 무엇인가요?

골랑곱이란 무엇인가요?

青灯夜游
青灯夜游원래의
2023-02-02 17:42:384173검색

gob은 Golang 패키지와 함께 제공되는 데이터 구조 직렬화를 위한 인코딩/디코딩 도구입니다. 인코더는 인코딩에 사용되고 디코더는 디코딩에 사용됩니다. Gob은 io.Writer 인터페이스를 사용하여 NewEncoder() 함수를 통해 Encoder 객체를 생성하고 Encode() 메서드를 호출하여 인코딩 작업을 구현합니다. io.Reader 인터페이스를 사용하여 NewDecoder() 함수를 통해 Decoder 객체를 생성하고 호출합니다. Decode() 메서드를 사용하여 디코딩 작업을 완료합니다.

골랑곱이란 무엇인가요?

이 튜토리얼의 운영 환경: Windows 7 시스템, GO 버전 1.18, Dell G3 컴퓨터.

 gob의 전체 이름은 다음과 같습니다: Go Binary

 Golang의 자체 데이터 구조 직렬화 인코딩/디코딩 도구, 이는 gob이 무언가에 데이터 구조를 직렬화할 수 있고 변경 사항을 역직렬화할 수도 있다는 것을 의미합니다! 나중에 직렬화가 무엇인지 살펴보겠습니다. 문자열로 바뀌든 바이너리 스트림으로 바뀌든 상관없습니다. 어쨌든 함수는 직렬화입니다.

  Gob을 사용할 때 Encoder 및 Decoder 개체에 주의해야 합니다. 이름에서 알 수 있듯이 하나는 인코딩할 때 사용되고 다른 하나는 디코딩할 때 사용됩니다.

골랑곱이란 무엇인가요?

골랑곱이란 무엇인가요?

따라서 Encoder 및 Decoder 개체를 얻으려면 이 두 함수를 호출해야 한다는 것이 분명합니다. 여기서 매개변수는 io.Writer와 io.Reader 인터페이스 유형이라는 점에 유의하세요. 이전 강의에서 이 두 인터페이스를 소개했으므로 여기서 필요한 매개변수는 각각 io.Writer와 io.Reader 인터페이스 유형을 구현하는 객체입니다.

 Encoder와 Decoder에는 각각 하나의 주요 메소드가 있습니다.

골랑곱이란 무엇인가요?

골랑곱이란 무엇인가요?

 여기서 보면 이미 다음과 같은 결론을 내릴 수 있습니다.

Gob은 io.Writer 인터페이스를 사용하고 NewEncoder() 함수를 통해 Encoder 객체를 생성합니다. . Encode() 메서드를 호출하여 인코딩 작업을 구현합니다. io.Reader 인터페이스를 사용하여 NewDecoder() 함수를 통해 Decoder 객체를 생성하고 Decode() 메서드를 호출하여 디코딩 작업을 완료합니다.

다음으로, gob을 쉽게 시작하기 위해 이 인코더와 디코더를 사용해 보겠습니다. 첫 번째 예를 살펴보겠습니다.

예 1: 데이터 구조와 bytes.Buffer 간 변환(바이트 슬라이스로 인코딩됨)

 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}

예 2 : 데이터 구조를 파일로 직렬화 및 역직렬화

 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}

위의 두 예는 어렵지 않습니다. 오류 처리 및 기타 코드를 제거하고 각 코드 블록에 주석을 달고 인내심을 갖고 읽어야 합니다. gob의 인코딩 및 디코딩의 본질을 이해할 수 있습니다.

gob이 무엇인지 이해한 것을 바탕으로, 개발에 gob을 사용해야 한다면 자세한 내용을 알아보려면 공식 문서를 자세히 읽어보는 것이 좋습니다: https://golang.org/pkg/encoding/gob/

[ 관련 추천 : Go 비디오 튜토리얼, 프로그래밍 교육

위 내용은 골랑곱이란 무엇인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.