Golang 함수의 json, xml 및 protobuf 인코딩 및 디코딩 방법

王林
풀어 주다: 2023-05-18 08:00:24
원래의
1388명이 탐색했습니다.

Golang은 웹 애플리케이션 개발에 널리 사용되는 오픈 소스 프로그래밍 언어입니다. Golang에서는 풍부한 기능 라이브러리를 제공할 뿐만 아니라 json, xml 및 protobuf를 포함한 다양한 인코딩 및 디코딩 방법도 제공합니다. 이 글에서는 Golang 함수의 json, xml, protobuf 인코딩 및 디코딩 방법과 그 사용법을 소개합니다.

1.json 인코딩 및 디코딩

1.1 인코딩

Golang에서 구조를 json 형식으로 인코딩하는 것은 매우 간단합니다. json 패키지의 Marshal 함수를 사용하여 구조를 json 데이터로 인코딩하면 됩니다.

예를 들어 다음과 같은 구조가 있습니다.

type Student struct {
    Name    string `json:"name"`
    Age     int    `json:"age"`
    Address string `json:"address"`
}
로그인 후 복사

이 구조를 json 형식으로 인코딩하려면 다음과 같이 할 수 있습니다.

s := Student{
    Name:    "张三",
    Age:     18,
    Address: "北京市朝阳区",
}
b, err := json.Marshal(s)
if err != nil {
    //错误处理
}
fmt.Println(string(b))
로그인 후 복사

출력 json 형식은 다음과 같습니다.

{
    "name": "张三",
    "age": 18,
    "address": "北京市朝阳区"
}
로그인 후 복사

1.2 Decoding

Similarly , json 패키지의 Unmarshal 함수를 사용하여 json 데이터를 구조로 디코딩하는 것도 매우 간단합니다. json 데이터를 Unmarshal 함수에 전달하기만 하면 됩니다.

예를 들어 다음과 같은 json 데이터가 있습니다.

data := `{
    "name": "李四",
    "age": 20,
    "address": "上海市浦东新区"
}`
로그인 후 복사

이 json 데이터를 구조로 디코딩하려면 다음을 수행할 수 있습니다.

var s Student
err := json.Unmarshal([]byte(data), &s)
if err != nil {
    //错误处理
}
fmt.Println(s.Name, s.Age, s.Address)
로그인 후 복사

출력 결과는 다음과 같습니다.

李四 20 上海市浦东新区
로그인 후 복사
로그인 후 복사

2.

2.1 인코딩

Golang에서는 구조를 xml 형식으로 인코딩할 수도 있습니다. 인코딩/xml 패키지의 Marshal 기능을 사용하면 됩니다.

예를 들어 다음과 같은 구조가 있습니다.

type Student struct {
    Name    string `xml:"name"`
    Age     int    `xml:"age"`
    Address string `xml:"address"`
}
로그인 후 복사

이 구조를 xml 형식으로 인코딩하려면 다음과 같이 할 수 있습니다.

s := Student{
    Name:    "张三",
    Age:     18,
    Address: "北京市朝阳区",
}
b, err := xml.Marshal(s)
if err != nil {
    //错误处理
}
fmt.Println(string(b))
로그인 후 복사

출력 xml 형식은 다음과 같습니다.

<Student>
    <name>张三</name>
    <age>18</age>
    <address>北京市朝阳区</address>
</Student>
로그인 후 복사

2.2 디코딩

마찬가지로 , 인코딩/xml 패키지의 Unmarshal 함수를 사용하여 xml 데이터를 구조로 디코딩하는 것도 매우 간단합니다. XML 데이터를 Unmarshal 함수에 전달하기만 하면 됩니다.

예를 들어 다음과 같은 XML 데이터가 있습니다.

data := `
<Student>
    <name>李四</name>
    <age>20</age>
    <address>上海市浦东新区</address>
</Student>`
로그인 후 복사

이 XML 데이터를 구조로 디코딩하려면 다음을 수행할 수 있습니다.

var s Student
err := xml.Unmarshal([]byte(data), &s)
if err != nil {
    //错误处理
}
fmt.Println(s.Name, s.Age, s.Address)
로그인 후 복사

출력 결과는 다음과 같습니다.

李四 20 上海市浦东新区
로그인 후 복사
로그인 후 복사

3.

3.1 protobuf 설치

protobuf 인코딩 및 디코딩을 수행하기 전에 먼저 protobuf를 설치해야 합니다. 설치 방법은 다음과 같습니다.

protobuf 설치 파일을 다운로드합니다. 다운로드 주소: https://github.com/protocolbuffers/protobuf/releases
  1. 설치 파일을 추출하고 압축이 풀린 디렉터리로 들어갑니다.
  2. 다음 명령을 실행하여 protobuf를 설치하세요.
  3. ./configure
    make
    make check
    sudo make install
    sudo ldconfig
    로그인 후 복사
protobuf가 성공적으로 설치되었는지 확인하세요.
  1. protoc --version
    로그인 후 복사
  2. 다음과 유사한 정보가 출력되면 protobuf가 성공적으로 설치된 것입니다.
libprotoc 3.6.1
로그인 후 복사

3.2 protobuf 파일 작성

Protobuf 컴파일이 진행 중입니다. 디코딩하기 전에 protobuf 파일도 작성해야 합니다. protobuf 파일에서 메시지 유형을 정의하고 각 필드에 태그를 할당해야 합니다.

예를 들어 protobuf 파일을 다음과 같이 작성합니다.

syntax = "proto3";
package main;

message Student {
    string name = 1;
    int32 age    = 2;
    string address = 3;
}
로그인 후 복사

protobuf에서 태그는 각 필드를 식별하는 데 사용되는 정수 값입니다. 이 예에서는 이름 필드가 1로 설정되고, 연령 필드가 2로, 주소 필드가 3으로 설정됩니다.

3.3 코딩

Golang에서는 protobuf를 사용한 코딩은 매우 간단합니다. protobuf 패키지의 Marshal 기능을 사용하세요.

예를 들어 다음과 같은 구조를 가지고 있습니다:

s := &pb.Student{
    Name:    "张三",
    Age:     18,
    Address: "北京市朝阳区",
}
b, err := proto.Marshal(s)
if err != nil {
    //错误处理
}
fmt.Println(string(b))
로그인 후 복사

출력 protobuf 인코딩은 다음과 같습니다:

1:6
2:18
3:"北京市朝阳区"
로그인 후 복사

3.4 Decoding

마찬가지로 protobuf 패키지의 Unmarshal 함수를 사용하여 protobuf 데이터를 디코딩하는 것도 매우 간단합니다. 구조로. protobuf 데이터와 메시지 유형을 Unmarshal 함수에 전달하기만 하면 됩니다.

예를 들어 다음과 같은 protobuf 데이터가 있습니다.

data := []byte{0x0a, 0x06, 0xe5, 0xbc, 0xa0, 0xe4, 0xb8, 0x89, 0x10, 0x12, 0x0f, 0xe5, 0x8c, 0x97, 0xe4, 0xba, 0xac, 0xe5, 0x9b, 0xbd, 0xe5, 0x8c, 0x9d, 0xe5, 0x8c, 0x97, 0xe5, 0x8c, 0x80, 0x1a, 0x0d, 0xe5, 0x8c, 0x97, 0xe4, 0xba, 0xac, 0xe5, 0x9b, 0xbd, 0xe5, 0x8c, 0x9d}
로그인 후 복사

이 protobuf 데이터를 구조로 디코딩하려면 다음을 수행할 수 있습니다.

var s pb.Student
err := proto.Unmarshal(data, &s)
if err != nil {
    //错误处理
}
fmt.Println(s.Name, s.Age, s.Address)
로그인 후 복사

출력 결과는 다음과 같습니다.

张三 18 北京市朝阳区
로그인 후 복사

Summary

Golang에서 제공됨 다양한 인코딩 및 디코딩 방법이 다양한 시나리오의 요구 사항을 충족할 수 있습니다. json 인코딩 및 디코딩, xml 인코딩 및 디코딩, protobuf 인코딩 및 디코딩은 일반적으로 사용되는 인코딩 및 디코딩 방법이며 적용 범위가 넓습니다. 이러한 코덱을 마스터하면 네트워크 애플리케이션을 보다 쉽게 ​​개발하는 데 도움이 될 수 있습니다.

위 내용은 Golang 함수의 json, xml 및 protobuf 인코딩 및 디코딩 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿