I use type declarations to custom type within gorm, the following code works fine:
type LocalTime time.Time
func (t LocalTime) MarshalJSON() ([]byte, error) {
pt := time.Time(t)
return []byte(fmt.Sprintf("\"%s\"", pt.Format("2006-01-02 15:04:05"))), nil
}
// ...etc
When I need to further more work with gocsv, matters come.
func (t *LocalTime) MarshalCSV() (string, error) {
s, err := t.MarshalJSON()
return string(s), err
}
type APIInfo struct {
ID uint64 `gorm:"type:bigint unsigned AUTO_INCREMENT;primaryKey;column:id" json:"-" csv:"-"`
AccessTime LocalTime `gorm:"column:access_time" json:"access_time" csv:"access_time"`
}
var infos []*APIInfo
// ...
gocsv.MarshalBytes(infos)
gocsv use reflect to detect whether a custom type has MarshalCSV method like below
reflect.TypeOf(localTime).MethodByName("MarshalCSV")
In this case, reflect.TypeOf(localTime) will return type of time.Time, which doesn't have MarshalCSV.
How can I fix it with as little damage to the existing code as possible?
Aucun commentaire:
Enregistrer un commentaire