第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

time.Time 的子類(lèi)型不使用 gorm lib 創(chuàng)建列

time.Time 的子類(lèi)型不使用 gorm lib 創(chuàng)建列

Go
阿波羅的戰(zhàn)車(chē) 2023-08-07 14:41:21
我正在嘗試向數(shù)據(jù)庫(kù)添加時(shí)間戳,并返回帶有表示時(shí)間戳的數(shù)字的 json,而不是時(shí)間戳的當(dāng)前字符串表示形式;本質(zhì)上是壓倒一切的元帥time.Timetype JSONTime time.Timefunc (j *JSONTime) UnmarshalJSON(data []byte) error {? ? if string(data) == "null" {? ? ? ? return nil? ? }? ? millis, err := strconv.ParseInt(string(data), 10, 64)? ? if err != nil {? ? ? ? return err? ? }? ? *j = JSONTime(time.Unix(0, millis*int64(time.Millisecond)))? ? return err}func (t JSONTime) MarshalJSON() ([]byte, error) {? ? //do your serializing here? ? stamp := fmt.Sprintf("%d", time.Time(t).Unix()*1000)? ? return []byte(stamp), nil}type table struct {? ? ID? ? ? ? int64? ? `gorm:"primary_key;auto_increment"json:"id"`? ? CreatedAt JSONTime json:"createdAt"`? ? UpdatedAt JSONTime json:"updatedAt"`}我遇到的問(wèn)題是上面的代碼只是忽略了數(shù)據(jù)庫(kù)中列的創(chuàng)建(創(chuàng)建了其他字段)。我什至手動(dòng)創(chuàng)建了該列,但 gorm 也不添加數(shù)據(jù)。我相信編組和解組工作,但問(wèn)題在于使用它們之前(即將列添加到數(shù)據(jù)庫(kù))我在這里做錯(cuò)了什么?我正在使用MySQL和庫(kù)gorm
查看完整描述

2 回答

?
斯蒂芬大帝

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊

我終于明白了。


有幾個(gè)問(wèn)題:


1-MarshalJSONand UnmarshalJSON僅適用于數(shù)據(jù)庫(kù)交互之前和之后


2-結(jié)構(gòu)table定義沒(méi)有正確的gorm定義:


type tablestruct {

    ID        int64            `gorm:"primary_key;auto_increment"json:"id"`

    CreatedAt timeLib.JSONTime `gorm:"type:timestamp;default:current_timestamp"json:"createdAt"`

    UpdatedAt timeLib.JSONTime `gorm:"type:timestamp;default:current_timestamp ON update current_timestamp"json:"updatedAt"`

}

3-由于 typeJSONTime是一個(gè)新類(lèi)型,驅(qū)動(dòng)程序不知道如何轉(zhuǎn)換它,所以我們需要重寫(xiě)Value:


func (jsonTime JSONTime) Value() (driver.Value, error) {

    return time.Time(jsonTime), nil

}

4-最后我們需要重寫(xiě)Scan以便將數(shù)據(jù)庫(kù)值轉(zhuǎn)換為JSONTime值


func (jsonTime *JSONTime) Scan(value interface{}) error {

    if value == nil {

        *jsonTime = JSONTime(time.Now())

        return nil

    }

    if readTime, err := driver.DefaultParameterConverter.ConvertValue(value); err == nil {

        if convertedTime, ok := readTime.(time.Time); ok {

            *jsonTime = JSONTime(convertedTime)

            return nil

        }

    }

    return errors.New("failed to scan TIME")

}


查看完整回答
反對(duì) 回復(fù) 2023-08-07
?
慕斯王

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超2個(gè)贊

嘗試一下


type JSONTime struct {

    time.Time

}


type BaseModel struct {

    ID        uint     `gorm:"autoIncrement;primary_key" json:"id"`

    CreatedAt JSONTime `gorm:"type:timestamp;default:current_timestamp" json:"created_at"`

    UpdatedAt JSONTime `gorm:"type:timestamp;default:current_timestamp" json:"updated_at"`

    DeletedAt JSONTime `gorm:"type:timestamp;default:current_timestamp" json:"deleted_at"`

}


查看完整回答
反對(duì) 回復(fù) 2023-08-07
  • 2 回答
  • 0 關(guān)注
  • 144 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)