gorm中時間處理

有于gorm沒有提供友好的時間處理功能,例如:查詢的時間格式“2019-08-12T14:38:47”,這樣的時間格式是及其不友好的,我們可以采用自定義數(shù)據(jù)類型的方式進行處理
自定義數(shù)據(jù)類型

package main
package utils

import (
    "database/sql/driver"
    "fmt"
    "time"
)

// JSONTime format json time field by myself
type JSONTime struct {
    time.Time
}

// MarshalJSON on JSONTime format Time field with %Y-%m-%d %H:%M:%S
func (t JSONTime) MarshalJSON() ([]byte, error) {
    if (t == JSONTime{}) {
        formatted := fmt.Sprintf("\"%s\"", "")
        return []byte(formatted), nil
    } else {
        formatted := fmt.Sprintf("\"%s\"", t.Format("2006-01-02 15:04:05"))
        return []byte(formatted), nil
    }
}

// Value insert timestamp into mysql need this function.
func (t JSONTime) Value() (driver.Value, error) {
    var zeroTime time.Time
    if t.Time.UnixNano() == zeroTime.UnixNano() {
        return nil, nil
    }
    return t.Time, nil
}

// Scan valueof time.Time
func (t *JSONTime) Scan(v interface{}) error {
    value, ok := v.(time.Time)
    if ok {
        *t = JSONTime{Time: value}
        return nil
    }
    return fmt.Errorf("can not convert %v to timestamp", v)
}

定義一個基礎(chǔ)struct,讓所有的model都繼承

type Model struct {
    ID        uint           `gorm:"primary_key" json:"id"`
    CreatedAt utils.JSONTime `json:"createdAt"`
    UpdatedAt utils.JSONTime `json:"updatedAt"`
    DeletedAt utils.JSONTime `json:"deletedAt"`
}

參考文章:

gorm中時間處理
gorm中自定義字段

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容