golang从数据库读取时间,如果遇到时间为Null,那么可以采用类似NullInt64的方法!
package main import ( "database/sql/driver" "encoding/json" "fmt" "time" ) type NullTime struct { Time time.Time Valid bool // 是否有值 } //实现它的赋值方法(注意,这个方属于指针) func (nt *NullTime) Scan(value interface{}) error { nt.Time,nt.Valid = value.(time.Time) return nil } //实现它的取值方式 func (nt NullTime) Value() (driver.Value,error) { if !nt.Valid { return nil,nil } return nt.Time,nil } func (this NullTime) MarshalJSON() ([]byte,error) { if this.Valid { var stamp = fmt.Sprintf("\"%s\"",time.Time(this.Time).Format("2006-01-02 15:04:05")) return []byte(stamp),nil } else { return nil,nil } } func main() { var t NullTime t.Scan(nil) body,_ := json.Marshal(t) fmt.Printf("%s",string(body)) t.Scan(time.Now()) body,_ = json.Marshal(t) fmt.Printf("%s",string(body)) }