mirror of
https://github.com/charlienet/go-mixed.git
synced 2025-07-18 00:22:41 +08:00
Structural binary serialization
This commit is contained in:
22
bytesconv/serialization.go
Normal file
22
bytesconv/serialization.go
Normal file
@ -0,0 +1,22 @@
|
||||
package bytesconv
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/gob"
|
||||
)
|
||||
|
||||
func Encode(v any) ([]byte, error) {
|
||||
var buf = new(bytes.Buffer)
|
||||
enc := gob.NewEncoder(buf)
|
||||
if err := enc.Encode(v); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return buf.Bytes(), nil
|
||||
}
|
||||
|
||||
func Decode(b []byte, out any) error {
|
||||
buf := bytes.NewBuffer(b)
|
||||
dec := gob.NewDecoder(buf)
|
||||
return dec.Decode(out)
|
||||
}
|
27
bytesconv/serialization_test.go
Normal file
27
bytesconv/serialization_test.go
Normal file
@ -0,0 +1,27 @@
|
||||
package bytesconv
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"testing"
|
||||
)
|
||||
|
||||
type SimpleUser struct {
|
||||
FirstName string
|
||||
LastName string
|
||||
}
|
||||
|
||||
func TestGob(t *testing.T) {
|
||||
u := SimpleUser{FirstName: "Radomir", LastName: "Sohlich"}
|
||||
buf, err := Encode(u)
|
||||
t.Log("Gob", BytesResult(buf).Hex(), err)
|
||||
|
||||
var u2 SimpleUser
|
||||
if err := Decode(buf, &u2); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
jBytes, _ := json.Marshal(u2)
|
||||
t.Log("Json:", BytesResult(jBytes).Hex())
|
||||
|
||||
t.Logf("%+v", u2)
|
||||
}
|
Reference in New Issue
Block a user