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
}