>  기사  >  백엔드 개발  >  golang 구조를 바이트로 변환

golang 구조를 바이트로 변환

WBOY
WBOY원래의
2023-05-10 22:54:361609검색

프로그래밍에서 데이터의 직렬화 및 역직렬화는 매우 일반적인 작업입니다. Golang에서는 표준 라이브러리의 "인코딩/바이너리" 패키지를 사용하여 데이터 구조를 바이트 시퀀스로 변환할 수 있는데, 이는 데이터 전송 및 저장에 특히 유용합니다. 이 기사에서는 Golang을 사용하여 구조를 바이트 시퀀스로 변환하는 방법을 소개합니다.

1. Golang의 구조

Golang에서 구조는 다양한 데이터 유형을 결합하여 보다 복잡한 데이터 유형을 형성할 수 있는 사용자 정의 데이터 구조입니다. 구조를 정의하는 구문은 다음과 같습니다.

type 结构体名 struct {
  字段名1 数据类型1
  字段名2 数据类型2
  ……
}

예를 들어 개인 정보를 나타내는 Person 구조를 정의할 수 있습니다.

type Person struct {
  Name string
  Age int
  Height float64
}

2. Golang의 바이트 시퀀스
Golang에서는 바이트 슬라이스를 사용하여 단어를 나타낼 수 있습니다. 파일에 전송하거나 저장하기 위해 데이터 구조를 바이트 시퀀스로 직렬화할 수 있는 시퀀스입니다. 예를 들어, 다음 명령문을 사용하여 빈 바이트 슬라이스를 생성할 수 있습니다:

b := make([]byte, 0)

3. 구조를 바이트 시퀀스로 변환

Golang의 "인코딩/바이너리" 패키지는 Golang 데이터 유형을 함수로 변환하기 위한 도구 세트를 제공합니다. 바이트 시퀀스의 경우. 구조체의 경우 "binary.Write" 함수를 사용하여 이를 바이트 시퀀스로 변환할 수 있습니다. 예는 다음과 같습니다.

package main

import (
  "encoding/binary"
  "fmt"
)

type Person struct {
  Name string
  Age int
  Height float64
}

func main() {
  p := Person{"Tom", 20, 1.8}
  b := make([]byte, 0)

  binary.Write(&b, binary.LittleEndian, p)

  fmt.Println(b)
}

이 예에서는 Person 구조체를 만들고 바이너리 모드를 사용하여 이를 바이트 조각으로 직렬화한 다음 바이트 조각을 출력합니다. 출력은 다음과 같습니다.

[3 84 111 109 20 0 0 0 0 0 0 0 0 0 0 0 236 81 184 30 133 235 64]

이 출력은 실제로 "Tom", "20" 및 "1.8"을 바이트 시퀀스로 변환한 결과입니다. 여기서는 Binary 모드를 사용하고 little-endian 모드를 사용합니다(즉, 시작 위치에 하위 바이트가 저장됨).

생성된 바이트 시퀀스에는 구조의 필드 이름과 유형 정보가 포함되어 있음을 알 수 있습니다. 데이터 구조를 올바르게 복원하려면 역직렬화 중에 이 정보를 알아야 하기 때문입니다.

4. 바이트 시퀀스를 구조로 변환

바이트 시퀀스를 구조로 역직렬화하려면 "binary.Read" 함수를 사용할 수 있습니다. 예는 다음과 같습니다.

package main

import (
  "bytes"
  "encoding/binary"
  "fmt"
)

type Person struct {
  Name   string
  Age    int
  Height float64
}

func main() {
  p := Person{"Tom", 20, 1.8}
  b := make([]byte, 0)

  binary.Write(&b, binary.LittleEndian, p)

  out := new(Person)
  buf := bytes.NewReader(b)
  binary.Read(buf, binary.LittleEndian, out)

  fmt.Printf("%+v", *out)
}

이 예에서는 먼저 "binary.Write"를 사용하여 Person 구조를 바이트 조각으로 직렬화합니다. 그런 다음 "bytes.NewReader"를 사용하여 바이트를 버퍼로 분할했습니다. 마지막으로 "binary.Read" 함수를 사용하여 버퍼의 데이터를 새로운 Person 구조로 읽고 결과를 출력합니다.

이 경우 출력은 다음과 같습니다.

{Name:"Tom", Age:20, Height:1.8}

이는 바이트 시퀀스를 Person 구조로 성공적으로 역직렬화했음을 보여줍니다.

Summary

Golang에서는 "encoding/binary" 패키지를 사용하여 데이터 구조를 바이트 시퀀스로 변환할 수 있습니다. 이는 데이터를 다른 컴퓨터로 전송하거나 파일에 저장할 수 있기 때문에 매우 유용합니다. 구조를 바이트 시퀀스로 변환하려면 "binary.Write" 함수를 사용할 수 있고, 바이트 시퀀스를 구조로 역직렬화하려면 "binary.Read" 함수를 사용할 수 있습니다. 이러한 함수는 다양한 데이터 유형을 처리하고 다양한 엔디안을 지원할 수 있습니다.

이 기사가 Golang의 구조를 바이트 시퀀스로 변환하는 데 도움이 되기를 바랍니다.

위 내용은 golang 구조를 바이트로 변환의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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