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./configure make make check sudo make install sudo ldconfig
protoc --version
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!