>  기사  >  백엔드 개발  >  golang을 통해 protobuf를 빌드하는 방법

golang을 통해 protobuf를 빌드하는 방법

PHPz
PHPz원래의
2023-04-25 10:48:451472검색

인터넷 기술의 발전으로 점점 더 많은 초보 프로그래머들이 golang 언어에 관심을 갖고 있습니다. 새로운 프로그래밍 언어로서 golang은 프로그래머들의 사용이 점점 더 늘어나고 있습니다. golang 언어에 능숙하면 프로그래머가 고품질 애플리케이션을 신속하게 개발하여 작업 효율성을 향상시키는 데 도움이 될 수 있습니다. 이번 글에서는 golang을 통해 protobuf를 구축하는 방법을 살펴보겠습니다.

1. protobuf 소개

protobuf(전체 이름은 프로토콜 버퍼)는 데이터 형식, 데이터 저장 및 데이터 교환을 설명하고 다양한 프로그래밍 언어에 대한 인터페이스 라이브러리를 제공하는 프로토콜입니다. protobuf는 구조화된 데이터를 직렬화하고, 저장 공간을 효과적으로 압축할 수 있으며, 확장성이 좋아 다양한 분산 시스템에서 사용하기에 매우 적합합니다.

2. protobuf 설치

protobuf를 사용하려면 먼저 시스템에 protobuf를 설치해야 합니다. 아래에서는 Linux 시스템에 protobuf를 설치하는 방법을 소개하겠습니다.

  1. 종속 라이브러리 설치

protobuf를 설치하기 전에 먼저 일부 종속 라이브러리를 설치해야 합니다. 다음 명령을 사용하여 종속 라이브러리를 설치할 수 있습니다:

sudo apt-get update

sudo apt-get install autoconf automake libtool curl make g++ unzip
  1. protobuf 소스 코드 다운로드

protobuf 공식 웹사이트로 이동하여 protobuf 소스 코드 패키지를 다운로드할 수 있습니다: https://github.com/protocolbuffers/protobuf /출시. 현재 운영 체제에 적합한 버전을 선택하고, 다운로드 후 지정된 경로에 압축을 해제하세요.

  1. Compile protobuf

압축 해제된 protobuf 소스 코드 디렉터리에서 다음 명령을 실행합니다.

./autogen.sh
./configure
make
make check
sudo make install
sudo ldconfig

위 단계가 성공적으로 실행되면 protobuf가 성공적으로 설치된 것입니다.

3. protobuf 사용

protobuf를 설치한 후 protobuf를 사용할 수 있습니다. 다음은 golang을 통해 protobuf를 사용하는 단계의 간단한 예입니다.

  1. 데이터 구조 정의

.gproto 파일에서 데이터 구조를 정의해야 합니다. 예를 들어 다음과 같이 정의된 Employee 데이터 구조를 정의합니다.

syntax = "proto3";

package myproto;

message Employee {
  string name = 1;
  int32 id = 2;
  string email = 3;
}

위 코드는 이름, ID 및 이메일이라는 세 가지 필드를 포함하는 Employee라는 데이터 구조를 정의합니다. 각 필드에는 서로 다른 구현 간의 통신에 사용되는 고유 식별 번호가 있습니다.

  1. Golang 파일 생성

데이터 구조를 정의한 후 protobuf 컴파일러를 사용하여 이를 golang 코드로 변환해야 합니다. golang 파일을 생성하려면 다음 명령을 사용하십시오.

protoc --go_out=. employee.proto

여기서 Employees.proto는 정의된 데이터 구조 파일이고 --go_out 옵션은 golang 코드 생성을 나타냅니다. 이 명령은 동일한 디렉터리에 Employee.pb.go 파일을 생성합니다.

  1. Golang 코드 사용하기

Golang 코드를 생성한 후 Golang에서 사용할 수 있습니다. 다음은 Employee 개체를 만들고 직렬화한 다음 역직렬화하는 샘플 프로그램입니다.

package main

import (
    "bytes"
    "fmt"
    "myproto"
    "strconv"

    "github.com/golang/protobuf/proto"
)

func main() {
    // 创建一个Employee对象
    employee := &myproto.Employee{
        Name: "张三",
        Id:   10001,
        Email: "zhangsan@qq.com",
    }
    fmt.Println("Employee对象:", employee)

    // 将Employee对象序列化为二进制数据
    data, err := proto.Marshal(employee)
    if err != nil {
        fmt.Println("序列化失败:", err)
        return
    }
    fmt.Println("序列化后的二进制数据:", data)

    // 将二进制数据反序列化为Employee对象
    newEmployee := &myproto.Employee{}
    err = proto.Unmarshal(data, newEmployee)
    if err != nil {
        fmt.Println("反序列化失败:", err)
        return
    }
    fmt.Println("反序列化后的Employee对象:", newEmployee)

    // 检查序列化和反序列化是否成功
    if newEmployee.Name != employee.Name ||
        newEmployee.Id != employee.Id ||
        newEmployee.Email != employee.Email {
        fmt.Println("反序列化结果与原始对象不一致!")
        return
    }
    fmt.Println("序列化和反序列化成功!")
}

위 코드에서는 protobuf에서 제공하는 proto.Marshal 및 proto.Unmarshal 메서드를 사용하여 Employee 개체를 직렬화 및 역직렬화합니다. 프로그램이 성공적으로 실행되면 출력 결과는 다음과 같습니다.

Employee对象: name:"张三" id:10001 email:"zhangsan@qq.com"
序列化后的二进制数据: [10 6 230 181 139 229 173 151 16 1 26 12 122 104 97 110 103 115 97 110 64 113 113 46 99 111 109]
反序列化后的Employee对象: name:"张三" id:10001 email:"zhangsan@qq.com"
序列化和反序列化成功!

IV. 요약

이 기사에서는 golang을 통해 protobuf를 빌드하는 방법을 소개했습니다. 먼저 protobuf 종속성 라이브러리를 설치한 다음 protobuf를 컴파일하고 마지막으로 직렬화 및 역직렬화를 위해 golang에서 protobuf를 사용했습니다. golang에서 사용되는 것 외에도 protobuf는 Python 및 Java와 같은 다른 프로그래밍 언어에서도 사용할 수 있으므로 분산 시스템의 데이터 교환에 매우 적합합니다. 이 기사가 프로그래머가 protobuf 기술을 더 잘 배우고 익히는 데 도움이 되기를 바랍니다.

위 내용은 golang을 통해 protobuf를 빌드하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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