>백엔드 개발 >Golang >Go 언어의 데이터 직렬화를 위해 Google 프로토콜 버퍼 사용

Go 언어의 데이터 직렬화를 위해 Google 프로토콜 버퍼 사용

WBOY
WBOY원래의
2023-06-16 14:13:512035검색

Google 프로토콜 버퍼(이하 ProtoBuf)는 분산 시스템에서 데이터 전송 및 저장에 널리 사용되는 가볍고 효율적인 데이터 직렬화 형식입니다. 최신 프로그래밍 언어인 Go 언어는 ProtoBuf 지원에도 매우 친숙합니다. 이 기사에서는 Go 언어에서 데이터 직렬화를 위해 ProtoBuf를 사용하는 방법을 소개합니다.

1. ProtoBuf 설치

ProtoBuf를 사용하기 전에 먼저 ProtoBuf를 설치해야 합니다. 공식 홈페이지(https://developers.google.com/protocol-buffers/)에서 운영 체제에 해당하는 바이너리 패키지를 다운로드하여 설치하거나 시스템 패키지 관리자(예: Ubuntu: sudo)를 사용하여 설치할 수 있습니다. apt-get 설치 protobuf-컴파일러).

설치가 완료된 후 다음 명령을 사용하여 설치 성공 여부를 확인할 수 있습니다.

$ protoc --version
libprotoc 3.6.1

2. 메시지 형식 정의

데이터 직렬화를 위해 ProtoBuf를 사용하기 전에 , 메시지 형식을 정의해야 합니다. ProtoBuf에서 메시지 형식은 .proto 파일을 통해 정의됩니다. 예를 들어 Person이라는 메시지 형식을 정의합니다.

syntax = "proto3";

message Person {
문자열 이름 = 1;
int32 age = 2;
반복 문자열 주소 = 3;
}

여기서 구문은 다음과 같습니다. ProtoBuf에서 사용하는 구문 버전, 메시지는 메시지 유형을 정의하고 이름, 나이 및 주소는 메시지의 필드입니다. 필드는 고유해야 하는 숫자 식별자로 지정됩니다.

ProtoBuf는 중첩된 메시지 유형을 지원하며 하나의 메시지 유형이 다른 메시지 유형의 필드로 정의될 수 있다는 점은 주목할 가치가 있습니다.

3. Go 코드 컴파일 및 생성

ProtoBuf는 프로그램에서 사용하기 위해 .proto 파일을 해당 언어의 코드로 컴파일해야 합니다. Go 언어에서는 컴파일을 위해 protoc-gen-go 플러그인을 사용하거나, 컴파일을 위해 github.com/golang/protobuf/protoc-gen-go 플러그인을 사용할 수 있습니다. 이 기사에서는 첫 번째 방법을 예로 들어 소개합니다.

먼저 플러그인을 설치해야 합니다:

$ go get -u github.com/golang/protobuf/protoc-gen-go

그런 다음 다음 명령을 사용하여 .proto 파일을 컴파일합니다:

$ protoc -- go_out=.*.proto

이렇게 하면 Person 메시지 유형의 정의와 직렬화 및 역직렬화와 관련된 메서드가 포함된 person.pb.go라는 Go 파일이 생성됩니다.

4. 데이터 직렬화에 ProtoBuf 사용

프로그램에서 데이터 직렬화에 ProtoBuf를 사용하는 것은 매우 간단합니다. Person 메시지를 예로 들면 다음 코드를 사용하여 Person 개체를 이진 데이터로 직렬화할 수 있습니다. 위의 코드에서는 먼저 Person 개체 p를 만든 다음 proto.Marshal 메서드를 호출하여 이진 데이터로 직렬화하고 인쇄합니다. proto.Marshal 메서드를 사용할 때는 Person 개체에 대한 포인터를 전달해야 합니다.

5. 데이터 역직렬화에 ProtoBuf 사용

데이터 직렬화와 마찬가지로 데이터 역직렬화에 ProtoBuf를 사용하는 것도 매우 간단합니다. 다음 코드를 사용하여 직렬화된 이진 데이터를 Person 개체로 역직렬화할 수 있습니다.

package main

import (

"log"

"github.com/golang/protobuf/proto"

)

func main() {

p := &Person{
    Name:    "Tom",
    Age:     20,
    Address: []string{"Shanghai", "Beijing"},
}

data, err := proto.Marshal(p)
if err != nil {
    log.Fatal("marshaling error: ", err)
}

log.Println(data)

}

위 코드에서 먼저 정의합니다. 이진 데이터를 가져온 다음 proto.Unmarshal 메서드를 호출하여 이를 Person 개체로 역직렬화하고 인쇄합니다.

6. 요약

이 글에서는 Go 언어에서 데이터 직렬화를 위해 ProtoBuf를 사용하는 방법을 소개했습니다. 데이터 직렬화 및 역직렬화를 위해 ProtoBuf를 사용할 때 메시지 형식을 정의하고 컴파일하여 해당 언어로 코드를 생성해야 한다는 점에 유의해야 합니다. 또한 데이터 직렬화 및 역직렬화를 위해 ProtoBuf를 사용하는 것은 매우 간단합니다. 완료하려면 해당 메서드를 호출하기만 하면 됩니다.

위 내용은 Go 언어의 데이터 직렬화를 위해 Google 프로토콜 버퍼 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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