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

golang gorm中格式化時(shí)間問(wèn)題詳解

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

前言

最近在開(kāi)發(fā)項(xiàng)目時(shí)遇到了發(fā)現(xiàn)一個(gè)問(wèn)題,

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

1.使用方法

通過(guò)自定義一個(gè)localtime的結(jié)構(gòu),來(lái)控制時(shí)間的格式

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

此時(shí)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.實(shí)現(xiàn)原理

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

這樣你就可以通過(guò)自定義的LocalTime來(lái)控制時(shí)間格式。

3.弊端與建議

因?yàn)樵诔绦蜻\(yùn)行時(shí),createAt這類字段的類型還是 LocalTime,所以如果你想自己給其復(fù)制,是不太容易做到的。

例如,你想在程序運(yùn)行時(shí)改一下其createAt的時(shí)間。你做不到! 因?yàn)樗念愋褪荓ocalTime,而你的時(shí)間要么是時(shí)間戳,要么是一個(gè)字符串,類型不匹配。。。是不是很尷尬???

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

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

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

總結(jié)

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

相關(guān)文章

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

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

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

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

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

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

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

    go語(yǔ)言中使用timer的常用方式

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

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

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

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

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

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

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

    go語(yǔ)言使用scp的方法實(shí)例分析

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

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

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

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

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

最新評(píng)論

郯城县| 山丹县| 虎林市| 潍坊市| 南雄市| 桂阳县| 若尔盖县| 江源县| 锦州市| 通海县| 额敏县| 曲周县| 黑河市| 游戏| 石柱| 九江市| 东方市| 万州区| 喀什市| 长沙市| 虎林市| 石楼县| 德保县| 襄垣县| 太仓市| 济阳县| 浦北县| 东乡| 宜黄县| 金阳县| 会理县| 桐乡市| 株洲县| 昌黎县| 鄄城县| 马尔康县| 玛曲县| 通化市| 阳春市| 密山市| 离岛区|