ホームページ > バックエンド開発 > Golang > GOB と Base64 を使用して Go で構造体を効率的にシリアル化および逆シリアル化するにはどうすればよいですか?

GOB と Base64 を使用して Go で構造体を効率的にシリアル化および逆シリアル化するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-04 08:08:13
オリジナル
358 人が閲覧しました

How Can I Efficiently Serialize and Deserialize Structs in Go Using GOB and Base64?

Go での効率的なシリアル化と逆シリアル化

Golang は、構造体を文字列にシリアル化および逆シリアル化するための複数のアプローチを提供します。 Session 構造体のような複雑な構造を扱う場合、パフォーマンスを維持しながらデータの忠実性を確保するアプローチを採用することが重要です。

GOB と Base64 を使用する

効果的な方法の 1 つは次のとおりです。 GOB エンコーダと Base64 エンコードを使用します。これを実現する方法は次のとおりです:

import (
    "encoding/base64"
    "encoding/gob"
    "bytes"
)

// Custom type for serialization
type Session struct {
    Properties map[string]interface{}
    Permissions []int64
}

// GOB encoder
func ToGOB64(m Session) string {
    b := bytes.Buffer{}
    e := gob.NewEncoder(&b)
    err := e.Encode(m)
    if err != nil {
        panic(err)
    }
    return base64.StdEncoding.EncodeToString(b.Bytes())
}

// GOB decoder
func FromGOB64(str string) Session {
    m := Session{}
    by, err := base64.StdEncoding.DecodeString(str)
    if err != nil {
        panic(err)
    }
    b := bytes.Buffer{}
    b.Write(by)
    d := gob.NewDecoder(&b)
    err = d.Decode(&m)
    if err != nil {
        panic(err)
    }
    return m
}
ログイン後にコピー

カスタム タイプ (この場合はセッション) をサポートするには、それらを GOB エンコーダーに登録できます:

func init() {
    gob.Register(Session{})
}
ログイン後にコピー

Otherシリアル化形式

GOB が適切でない場合は、Go で使用できる代替シリアル化形式があります。 JSON、XML、protobuf として。各形式には、さまざまな利点とトレードオフがあります。

パフォーマンス

シリアル化と逆シリアル化のパフォーマンスは、データのサイズと選択した形式に大きく依存します。 GOB は比較的高速になる傾向がありますが、JSON と XML は低速で​​すが、人間が読みやすいものになります。さまざまな形式のベンチマークを行うと、特定のアプリケーションに最適なオプションを決定するのに役立ちます。

以上がGOB と Base64 を使用して Go で構造体を効率的にシリアル化および逆シリアル化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート