golang时间从数据库读取时间

前端之家收集整理的这篇文章主要介绍了golang时间从数据库读取时间前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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))
}

猜你在找的Go相关文章