Go 언어에서 직렬화 및 역직렬화는 일반적으로 데이터를 바이트 스트림(또는 기타 전송 가능한 형식)으로 변환하여 구현됩니다. 다음은 일반적으로 사용되는 몇 가지 직렬화 및 역직렬화 방법입니다.
- JSON 직렬화 및 역직렬화: Go 언어에는 내장 표준 라이브러리인 인코딩/json이 있으며 json.Marshal()을 사용하여 데이터 구조를 JSON 형식 바이트로 직렬화할 수 있습니다. 스트림의 경우 json.Unmarshal()을 사용하여 JSON 형식 바이트 스트림을 데이터 구조로 역직렬화합니다.
import "encoding/json" // 序列化为JSON data, err := json.Marshal(obj) // 反序列化JSON err = json.Unmarshal(data, &obj)
로그인 후 복사
- XML 직렬화 및 역직렬화: Go 언어에는 내장된 표준 라이브러리인 인코딩/xml이 있습니다. xml.Marshal()을 사용하여 데이터 구조를 XML 형식의 바이트 스트림으로 직렬화하고 xml.Unmarshal( ) XML 형식의 바이트 스트림을 데이터 구조로 역직렬화합니다.
import "encoding/xml" // 序列化为XML data, err := xml.Marshal(obj) // 反序列化XML err = xml.Unmarshal(data, &obj)
로그인 후 복사
- gob 직렬화 및 역직렬화: Go 언어에는 표준 라이브러리 인코딩/gob이 내장되어 있습니다. gob.NewEncoder() 및 gob.NewDecoder()를 사용하여 인코더와 디코더를 생성하고 Encode() 및 Decode를 각각 호출할 수 있습니다. .() 직렬화 및 역직렬화 메서드입니다.
import "encoding/gob" // 序列化为字节流 var buffer bytes.Buffer encoder := gob.NewEncoder(&buffer) err = encoder.Encode(obj) data := buffer.Bytes() // 反序列化字节流 decoder := gob.NewDecoder(bytes.NewReader(data)) err = decoder.Decode(&obj)
로그인 후 복사
- 프로토콜 버퍼(protobuf) 직렬화 및 역직렬화: Go 언어는 효율적인 직렬화 및 역직렬화를 위해 protobuf 프로토콜을 사용할 수 있는 타사 라이브러리 github.com/golang/protobuf/proto를 제공합니다.
import "github.com/golang/protobuf/proto" // 序列化为字节流 data, err := proto.Marshal(obj) // 反序列化字节流 err = proto.Unmarshal(data, obj)
로그인 후 복사
위는 일반적으로 사용되는 직렬화 및 역직렬화 방법 중 특정 요구 사항과 시나리오에 따라 적절한 방법을 선택합니다.