Serialization - Go

Przykładowa serializacja danych do plików binarnych i plików JSON:

import (
    "fmt"
    "os"

    "google.golang.org/protobuf/encoding/protojson"
    "google.golang.org/protobuf/proto"
)

func ProtobufToJSON(message proto.Message) ([]byte, error) {
    data, err := protojson.Marshal(message)
    if err != nil {
        return nil, fmt.Errorf("cannot marshal proto message to json format: %s", err)
    }
    return data, err
}

func WriteProtobufToJSONFile(message proto.Message, filename string) error {
    data, err := ProtobufToJSON(message)
    if err != nil {
        return err 
    }

    err = os.WriteFile(filename, data, 0644)
    if err != nil {
        return fmt.Errorf("cannot  write binary data to file: %w", err)
    }

    return nil 
}

func WriteProtobufToBinaryFile(message proto.Message, filename string) error {
    data, err := proto.Marshal(message)
    if err != nil {
        return fmt.Errorf("cannot marshal proto message: %w", err)
    }

    err = os.WriteFile(filename, data, 0644)
    if err != nil {
        return fmt.Errorf("cannot write binary data to file: %w", err)
    }

    return nil
}

func ReadProtobufFromBinaryFile(filename string, message proto.Message) error {
    data, err := os.ReadFile(filename)
    if err != nil {
        return fmt.Errorf("cannot read binary data from file: %w", err)
    }

    err = proto.Unmarshal(data, message)
    if err != nil {
        return fmt.Errorf("cannot unmarshal binary to proto message: %w", err)
    }

    return nil 
}