Мне удалось изменить мой код, чтобы он правильно отображал все строки таблицы, даже если есть нулевые значения
type NullString struct {
sql.NullString
}
func (ns *NullString) MarshalJSON() ([]byte, error) {
if !ns.Valid {
return []byte("null"), nil
}
return json.Marshal(ns.String)
}
type LogItem struct {
UserId string `form:"userid" json:"userid"`
UserDate string `form:"date" json:"date"`
CheckinTime NullString `form:"checkintime" json:"checkintime"`
CheckinLocation NullString `form:"checkinlocation" json:"checkinlocation"`
CheckoutTime NullString `form:"checkouttime" json:"checkouttime"`
CheckoutLocation NullString `form:"checkoutlocation" json:"checkoutlocation"`
}
db := DBconnect()
defer db.Close()
rows, err := db.Query("SELECT * FROM oc_log")
if err != nil {
log.Print(err)
}
for rows.Next() {
if err := rows.Scan(&logItem.UserId, &logItem.UserDate, &logItem.CheckinTime, &logItem.CheckinLocation, &logItem.CheckoutTime, &logItem.CheckoutLocation); err != nil {
log.Fatal(err.Error())
} else {
arrLogItem = append(arrLogItem, logItem)
}
}
{"status": 200, "message": "Success""," Data ": [{" userid ":" 9 "," date ":" 2019-09-25T00: 00: 00Z "," checkintime ":" 0000-01-01T14: 56: 39 + 07: 00"," checkinlocation ":" (100, 100) "," checkouttime ":" 0000-01-01T15: 52: 22 + 07: 00 "," checkoutlocation ":" (100, 100) "}, {" userid":" 10 "," date ":" 2019-09-27T00: 00: 00Z "," checkintime ":" 0000-01-01T14: 04: 44 + 07: 00 "," checkinlocation ":" (123,321) "," checkouttime ": null," checkoutlocation ": null}]}
Теперь проблема заключается в том, как отформатировать 0000-01-01T14: 04: 44 + 07: 00 в более дружественный для человека вывод, такой как 17: 09: 02 , например?
Этот код не компилируется:
func (ns *NullString) MarshalJSON() ([]byte, error) {
if !ns.Valid {
return []byte("null"), nil
}
return json.Marshal(time.Parse(time.RFC3339, ns.String))
}
тожемного аргументов в вызове json.Marshal имеют (time.Time, error) хотеть (interface {})