Go에서 복잡한 데이터 구조로 작업할 때 효율적인 저장 및 통신을 위해 직렬화하는 것이 중요합니다. 여기에는 지속성을 위해 구조체를 문자열로 인코딩하고 나중에 원본 데이터를 복구하기 위해 역직렬화하는 작업이 포함됩니다.
Go 구조체를 직렬화하는 가장 효과적인 접근 방식 중 하나는 gob을 활용하는 것입니다. 및 base64 패키지. 작동 방식은 다음과 같습니다.
import ( "bytes" "encoding/base64" "encoding/gob" "fmt" ) type SX map[string]interface{} // go binary encoder func ToGOB64(m SX) string { b := bytes.Buffer{} e := gob.NewEncoder(&b) err := e.Encode(m) if err != nil { fmt.Println("failed gob Encode", err) } return base64.StdEncoding.EncodeToString(b.Bytes()) } // go binary decoder func FromGOB64(str string) SX { m := SX{} by, err := base64.StdEncoding.DecodeString(str) if err != nil { fmt.Println("failed base64 Decode", err) } b := bytes.Buffer{} b.Write(by) d := gob.NewDecoder(&b) err = d.Decode(&m) if err != nil { fmt.Println("failed gob Decode", err) } return m }
세션 구조체와 같은 사용자 정의 구조체 또는 유형을 직렬화하려면 코드에 다음 줄을 추가하기만 하면 됩니다.
func init() { gob.Register(SX{}) gob.Register(Session{}) // Register your custom struct }
gob 외에도 대안이 있습니다 Go에서 직렬화 형식을 사용할 수 있습니다(2020년 기준). 동적 구조 직렬화의 경우 2022 벤치마크를 참조하여 지침을 고려할 수 있습니다.
위 내용은 Go에서 복잡한 구조체를 효율적으로 직렬화 및 역직렬화하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!