最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

golang gorm中格式化時間問題詳解

 更新時間:2019年07月09日 16:43:29   作者:yuanshuli11  
這篇文章主要給大家介紹了關(guān)于golang gorm中格式化時間問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用golang具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

前言

最近在開發(fā)項目時遇到了發(fā)現(xiàn)一個問題,

gorm雖然可以自動幫你維護(hù) created_at、updated_at、deleted_at這些關(guān)鍵時間字段。但是其原理與弊端需要了解一下。

1.使用方法

通過自定義一個localtime的結(jié)構(gòu),來控制時間的格式

package utils
import (
 "time"
 //"strconv"
 "fmt"
 "database/sql/driver"
 "strconv"
)
type LocalTime struct {
 time.Time
}
func (t LocalTime) MarshalJSON() ([]byte, error) {
 //格式化秒
 seconds := t.Unix()
 return []byte(strconv.FormatInt(seconds, 10)), nil
}
func (t LocalTime) Value() (driver.Value, error) {
 var zeroTime time.Time
 if t.Time.UnixNano() == zeroTime.UnixNano() {
 return nil, nil
 }
 return t.Time, nil
}
func (t *LocalTime) Scan(v interface{}) error {
 value, ok := v.(time.Time)
 if ok {
 *t = LocalTime{Time: value}
 return nil
 }
 return fmt.Errorf("can not convert %v to timestamp", v)
}

此時dao的字段結(jié)構(gòu)為

type TestDao struct{
   Id    uint    `gorm:"primary_key,AUTO_INCREMENT" json:"id"`
 CreatedAt  LocalTime `json:"-"`
 UpdatedAt  LocalTime `json:"update_at"`
 DeletedAt  *LocalTime `json:"-"`
}

2.實現(xiàn)原理

其實現(xiàn)方式其實是通過在save變更時,通過callback功能,將其定義為當(dāng)前時間。文章可參考 傳送門

這樣你就可以通過自定義的LocalTime來控制時間格式。

3.弊端與建議

因為在程序運行時,createAt這類字段的類型還是 LocalTime,所以如果你想自己給其復(fù)制,是不太容易做到的。

例如,你想在程序運行時改一下其createAt的時間。你做不到! 因為它的類型是LocalTime,而你的時間要么是時間戳,要么是一個字符串,類型不匹配。。。是不是很尷尬???

所以建議這類保留字段還是不要在程序運行時去修改。只用它作為記錄或標(biāo)識即可。如果真的需要更改時間,還是自己維護(hù)字段的內(nèi)容吧。例如用int存時間戳或string存字符串。然后每次變更時,去修改它的值。

當(dāng)然也可以將這工作自己封裝成一個callback函數(shù),這樣你就能夠隨意控制這個字段了??蓞⒖忌衔膫魉烷T中的內(nèi)容。

所以,想吐槽的是,gorm對時間格式化的這種實現(xiàn)方式,太不人性化了!

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Go中阻塞以及非阻塞操作實現(xiàn)(Goroutine和main Goroutine)

    Go中阻塞以及非阻塞操作實現(xiàn)(Goroutine和main Goroutine)

    本文主要介紹了Go中阻塞以及非阻塞操作實現(xiàn)(Goroutine和main Goroutine),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • 關(guān)于go get 下載第三方包存儲路徑問題

    關(guān)于go get 下載第三方包存儲路徑問題

    這篇文章主要介紹了關(guān)于go get 下載第三方包存儲路徑問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Go?http.Transport?主要參數(shù)說明

    Go?http.Transport?主要參數(shù)說明

    這篇文章主要為大家介紹了Go?http.Transport主要參數(shù)說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • go語言中使用timer的常用方式

    go語言中使用timer的常用方式

    這篇文章主要介紹了go語言中使用timer的常用方式,實例分析了三種常用的使用timer的方法,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • Go語言創(chuàng)建、初始化數(shù)組的常見方式匯總

    Go語言創(chuàng)建、初始化數(shù)組的常見方式匯總

    這篇文章主要介紹了Go語言創(chuàng)建、初始化數(shù)組的常見方式,實例匯總了Go語言操作數(shù)組的常見技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • 手把手教你如何在Goland中創(chuàng)建和運行項目

    手把手教你如何在Goland中創(chuàng)建和運行項目

    歡迎來到本指南!我們將手把手地教您在Goland中如何創(chuàng)建、配置并運行項目,通過簡單的步驟,您將迅速上手這款強(qiáng)大的集成開發(fā)環(huán)境(IDE),輕松實現(xiàn)您的編程夢想,讓我們一起開啟這段精彩的旅程吧!
    2024-02-02
  • golang解壓帶密碼的zip包的方法詳解

    golang解壓帶密碼的zip包的方法詳解

    ZIP 文件格式是一種常用的壓縮和歸檔格式,用于將多個文件和目錄打包到一個單獨的文件中,同時對其內(nèi)容進(jìn)行壓縮以減少文件大小,golang zip包的解壓有官方的zip包(archive/zip),但是官方給的zip解壓包代碼只有解壓不帶密碼的zip包,下面給出解壓操作的封裝
    2024-07-07
  • go語言使用scp的方法實例分析

    go語言使用scp的方法實例分析

    這篇文章主要介紹了go語言使用scp的方法,實例分析了go語言調(diào)用scp命令的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • Go 值傳遞與引用傳遞的方法

    Go 值傳遞與引用傳遞的方法

    這篇文章主要介紹了Go 值傳遞與引用傳遞的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • golang 實現(xiàn)兩個結(jié)構(gòu)體復(fù)制字段

    golang 實現(xiàn)兩個結(jié)構(gòu)體復(fù)制字段

    這篇文章主要介紹了golang 實現(xiàn)兩個結(jié)構(gòu)體復(fù)制字段,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04

最新評論

海口市| 灵丘县| 错那县| 肇源县| 缙云县| 南阳市| 衢州市| 和顺县| 霸州市| 赣榆县| 天柱县| 新乡市| 临海市| 东安县| 凉山| 广丰县| 永宁县| 枞阳县| 收藏| 宁津县| 宜宾县| 墨脱县| 温州市| 浦县| 麻阳| 邵阳县| 四会市| 永德县| 都江堰市| 奎屯市| 根河市| 准格尔旗| 南乐县| 安庆市| 遂溪县| 宜都市| 岳阳县| 烟台市| 逊克县| 新疆| 寻乌县|