>백엔드 개발 >Golang >Golang 함수의 구조 유형에 대한 인코딩 및 디코딩 기술

Golang 함수의 구조 유형에 대한 인코딩 및 디코딩 기술

王林
王林원래의
2023-05-15 23:21:11958검색

Golang은 프로그래머가 효율적인 코드를 빠르게 작성할 수 있도록 다양한 내장 유형과 기능을 제공하는 매우 강력한 프로그래밍 언어입니다. 그 중 구조 유형은 매우 일반적으로 사용되는 유형입니다. 네트워크 통신, 데이터 저장 및 전송 등을 처리할 때 일반적으로 구조 유형 데이터를 바이너리 데이터로 인코딩하거나 JSON 형식의 문자열로 직렬화하여 전송해야 합니다. 이 기사에서는 Golang 함수의 구조 유형에 대한 몇 가지 코딩 및 디코딩 기술을 소개합니다.

  1. 구조체 유형 정의

Golang에서 구조 유형 정의에는 type 키워드와 struct 키워드를 사용해야 합니다. 예를 들어 다음은 Name 및 Age라는 두 개의 필드를 포함하는 Person 구조 유형을 정의합니다.

type Person struct {
    Name string
    Age int
}
  1. JSON 인코딩 및 디코딩

JSON은 가볍고 쓰기 쉬운 데이터 교환 형식입니다. Golang에서는 json 패키지의 Marshal() 및 Unmarshal() 함수를 사용하여 구조 유형의 JSON 인코딩 및 디코딩을 구현할 수 있습니다.

  • JSON 인코딩

인코딩할 때 구조 유형을 []바이트 유형의 바이트 배열로 변환해야 하며 이는 json.Marshal() 함수를 통해 달성할 수 있습니다. 예를 들어 다음 예제에서는 Person 유형의 인스턴스 p를 JSON 형식의 문자열로 인코딩합니다.

p := Person{"Tina", 28}
jsonData, _ := json.Marshal(p)
fmt.Println(string(jsonData))   // {"Name":"Tina","Age":28}
  • JSON decoding

디코딩할 때 JSON 문자열을 구조 유형으로 구문 분석해야 합니다. 이는 json.Unmarshal() 함수를 통해 달성할 수 있습니다. 예를 들어 다음 예에서는 JSON 문자열 jsonStr을 Person 유형 인스턴스로 디코딩합니다.

jsonStr := `{"Name":"Tina", "Age": 28}`
var p Person
_ = json.Unmarshal([]byte(jsonStr), &p)
fmt.Println(p)  // {Tina 28}
  1. 바이트 시퀀스 인코딩 및 디코딩

네트워크 통신 또는 데이터 저장 과정에서 구조 유형을 바이트로 직렬화해야 합니다. 순서. 예를 들어, Person 유형 인스턴스 p를 바이트 시퀀스 byteData로 직렬화하려면:

buf := new(bytes.Buffer)
binary.Write(buf, binary.LittleEndian, &p)
byteData := buf.Bytes()
fmt.Printf("%x
", byteData)   // 54696e61001c0000

bytes.Buffer 및 binary.Write() 함수를 사용하여 구조 유형 p를 바이트 시퀀스 byteData로 직렬화합니다. Binary.Write() 함수의 두 번째 매개변수는 바이트 순서 처리 방법을 지정하며 여기서는 LittleEndian 형식이 사용됩니다.

마찬가지로, 바이너리.Read() 함수를 사용하여 동일한 형식으로 byteData를 역직렬화할 수도 있습니다. 예:

var q Person
err := binary.Read(bytes.NewReader(byteData), binary.LittleEndian, &q)
if err != nil {
    fmt.Println(err)
}
fmt.Println(q)  // {Tina 28}
  1. Gob 인코딩 및 디코딩

Gob은 Golang과 함께 제공되는 인코딩 형식이며 사용됩니다. RPC 호출에 사용되며 데이터 전송 중에 자주 사용됩니다. Golang에서는 Gob 인코딩 및 디코딩을 위해 gob 패키지도 제공됩니다.

  • Gob Encoding

gob.NewEncoder() 함수를 사용하여 인코더 인스턴스를 만든 다음 Encode() 메서드를 사용하여 구조 유형을 바이트 시퀀스로 인코딩할 수 있습니다. 예를 들어, Person 유형의 인스턴스 p를 바이트 시퀀스 byteData로 인코딩합니다.

var byteData bytes.Buffer
enc := gob.NewEncoder(&byteData)
err := enc.Encode(&p)
if err != nil {
    fmt.Println(err)
}
fmt.Printf("%x
", byteData.Bytes())   // 026864073544696e61001c

우리는 bytes.Buffer 및 gob.NewEncoder() 함수를 사용하여 구조 유형 p를 바이트 시퀀스 byteData로 인코딩합니다.

  • Gob 디코딩

디코딩할 때 gob 패키지도 사용해야 합니다. 디코더 인스턴스를 만들고 해당 Decode() 메서드를 사용하여 바이트 시퀀스를 디코딩합니다. 예를 들어, 위의 예에서 인코딩된 byteData를 Person 유형의 인스턴스 q로 디코딩합니다.

dec := gob.NewDecoder(&byteData)
var q Person
err := dec.Decode(&q)
if err != nil {
    fmt.Println(err)
}
fmt.Println(q)  // {Tina 28}

요약

구조 유형은 Golang에서 일반적으로 사용되는 데이터 유형으로, 네트워크 통신과 데이터 저장 및 전송을 다룰 때 자주 사용됩니다. 구조 유형은 이진 데이터로 인코딩되거나 전송을 위해 문자열로 직렬화되어야 합니다. 이 기사에서는 JSON 인코딩 및 디코딩, 바이트 시퀀스 인코딩 및 디코딩, Gob 인코딩 및 디코딩을 포함하여 Golang 함수의 구조 유형에 대한 일부 인코딩 및 디코딩 기술을 소개합니다. 이러한 기술은 데이터 전송 및 저장 작업을 빠르고 효율적으로 완료하는 데 도움이 될 수 있습니다.

위 내용은 Golang 함수의 구조 유형에 대한 인코딩 및 디코딩 기술의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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