Generic, context-aware flat file marshaller and unmarshaller using the flat field tag in structs.
type Record struct {
FirstName string `flat:"first_name"`
LastName *string `flat:"last_name"`
Age int `flat:"age"`
Height float32 `flat:"-"` // ignored
}
...
goflat.MarshalIteratorToWriter[Record](ctx, seq, writer *csv.Writer, opts Options)
// or
goflat.MarshalSliceToWriter[Record](ctx, slice, csvWriter, options)
// or
goflat.MarshalChannelToWriter[Record](ctx, inputCh, csvWriter, options)Will result in:
first_name,last_name,age
John,Doe,30
Jane,Doe,20
Can unmarshal too!
goflat.UnmarshalToChan[Record](ctx, csvReader, options, outputCh)Both marshal and unmarshal operations support goflat.Options, which allow to introduce automatic safety checks, such as duplicated headers, flat tag coverage and more.
Both operations can be customised for each field in a struct by having that value implementing goflat.Marshal and/or goflat.Unmarshal.
type Record struct {
Field MyType `flat:"field"`
}
type MyType struct {
Value int
}
func (m *MyType) Marshal() (string,error) {
if m.Value %2 == 0 {
return "odd", nil
}
return "even", nil
}