欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

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

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

1.使用方法

通過自定義一個localtime的結構,來控制時間的格式

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的字段結構為

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功能,將其定義為當前時間。文章可參考 傳送門

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

3.弊端與建議

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

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

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

當然也可以將這工作自己封裝成一個callback函數(shù),這樣你就能夠隨意控制這個字段了。可參考上文傳送門中的內(nèi)容。

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

總結

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

相關文章

  • Go語言中的逃逸分析究竟是什么?

    Go語言中的逃逸分析究竟是什么?

    這篇文章主要介紹了Go語言中的逃逸,套喲究竟是什么呢?通俗來講,當一個對象的指針被多個方法或線程引用時,我們稱這個指針發(fā)生了“逃逸”。下面文章將詳細介紹Go語言中的逃逸,需要的朋友可以參考一下
    2021-09-09
  • Golang實現(xiàn)Json分級解析及數(shù)字解析實踐詳解

    Golang實現(xiàn)Json分級解析及數(shù)字解析實踐詳解

    你是否遇到過在無法準確確定json層級關系的情況下對json進行解析的需求呢?本文就來和大家介紹一次解析不確定的json對象的經(jīng)歷,以及遇到的問題和解決方法
    2023-02-02
  • GoLang channel底層代碼實現(xiàn)詳解

    GoLang channel底層代碼實現(xiàn)詳解

    Channel和goroutine的結合是Go并發(fā)編程的大殺器。而Channel的實際應用也經(jīng)常讓人眼前一亮,通過與select,cancel,timer等結合,它能實現(xiàn)各種各樣的功能。接下來,我們就要梳理一下GoLang channel底層代碼實現(xiàn)
    2022-10-10
  • go語言中的面向對象

    go語言中的面向對象

    Go不支持類,而是提供了結構體。結構體中可以添加屬性和方法。這樣可以將數(shù)據(jù)和操作數(shù)據(jù)的方法綁定在一起,實現(xiàn)與類相似的效果。這篇文章介紹了go語言中的面向對象,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • GoLang基于zap日志庫的封裝過程詳解

    GoLang基于zap日志庫的封裝過程詳解

    Zap是我個人比較喜歡的日志庫,是uber開源的,有較好的性能,在項目開發(fā)中,經(jīng)常需要把程序運行過程中各種信息記錄下來,有了詳細的日志有助于問題排查和功能優(yōu)化,這篇文章主要介紹了GoLang基于zap日志庫的封裝過程,想要詳細了解可以參考下文
    2023-05-05
  • golang實現(xiàn)可中斷的流式下載功能

    golang實現(xiàn)可中斷的流式下載功能

    這篇文章主要給大家介紹了golang實現(xiàn)可中斷的流式下載,文中通過代碼示例給大家介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • 詳解golang碎片整理之 fmt.Scan

    詳解golang碎片整理之 fmt.Scan

    本文介紹了從golang語言中fmt包從標準輸入獲取數(shù)據(jù)的Scan系列函數(shù)、從io.Reader中獲取數(shù)據(jù)的Fscan系列函數(shù)以及從字符串中獲取數(shù)據(jù)的Sscan系列函數(shù)的用法,感興趣的小伙伴們可以參考一下
    2019-05-05
  • Go中的應用配置管理詳解

    Go中的應用配置管理詳解

    這篇文章主要為大家介紹了Go中的應用配置管理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • 10個現(xiàn)代網(wǎng)站開發(fā)必備的Go軟件包工具盤點

    10個現(xiàn)代網(wǎng)站開發(fā)必備的Go軟件包工具盤點

    這篇文章主要為大家介紹了10個現(xiàn)代網(wǎng)站開發(fā)必備的Go軟件包,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • Go語言實現(xiàn)的簡單網(wǎng)絡端口掃描方法

    Go語言實現(xiàn)的簡單網(wǎng)絡端口掃描方法

    這篇文章主要介紹了Go語言實現(xiàn)的簡單網(wǎng)絡端口掃描方法,實例分析了Go語言網(wǎng)絡程序的實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02

最新評論