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

go語言中g(shù)orm時(shí)間格式化

 更新時(shí)間:2023年03月07日 14:30:08   作者:小龍?jiān)谏綎|  
本文主要介紹了go語言中g(shù)orm時(shí)間格式化,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

GORM自帶的time.Time類型JSON默認(rèn)輸出RFC3339Nano格式的,但是如果想改為yyyy-MM-dd HH:mm:ss形式的時(shí)間格式,需要定制MarshalJSON了。

以下是數(shù)據(jù)庫里存儲(chǔ)的數(shù)據(jù):

Go聲明了一個(gè)LocalTime的別名,然后綁定了函數(shù)MarshalJSON,用于在序列化時(shí)調(diào)用。

package main

import (
	"database/sql/driver"
	"encoding/json"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/schema"
	"strings"
	"time"
)

type Student struct {
	Id       int
	Name     string
	Age      int
	Sex      string
	CreateAt time.Time
}

// TableName 指定表名
func (Student) TableName() string {
	return "student"
}

// LocalTime 別名
type LocalTime time.Time

func (t LocalTime) MarshalJSON() ([]byte, error) {
	tTime := time.Time(t)
	return []byte(fmt.Sprintf("\"%v\"", tTime.Format("2006-01-02 15:04:05"))), nil
}

func (t LocalTime) Value() (driver.Value, error) {
	// LocalTime 轉(zhuǎn)換成 time.Time 類型
	tTime := time.Time(t)
	return tTime.Format("2006-01-02 15:04:05"), nil
}

func (t *LocalTime) UnmarshalJSON(data []byte) error {
	if string(data) == "null" {
		return nil
	}
	var err error
	//前端接收的時(shí)間字符串
	str := string(data)
	//去除接收的str收尾多余的"
	timeStr := strings.Trim(str, "\"")
	t1, err := time.Parse("2006-01-02 15:04:05", timeStr)
	*t = LocalTime(t1)
	return err
}

type StudentLocal struct {
	Id       int
	Name     string
	Age      int
	Sex      string
	CreateAt LocalTime
}

// TableName 指定表名
func (StudentLocal) TableName() string {
	return "student"
}

var db *gorm.DB
var err error

func init() {
	//dsn格式 user:pass@tcp(ip:port)/dbname?charset=utf8mb4&parseTime=True&loc=Local
	dsn := "user:pass@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local"
	db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
		NamingStrategy: schema.NamingStrategy{
			TablePrefix:   "",   // 表前綴
			SingularTable: true, // 禁用表名復(fù)數(shù)
		}})
	if err != nil {
		panic(err)
	}
}

func main() {
	var student Student
	db.First(&student) // 取第一條到student
	js, _ := json.Marshal(student)
	fmt.Println(string(js))
	// {"Id":1,"Name":"張三","Age":20,"Sex":"男","CreateAt":"2022-12-06T17:49:06+08:00"}

	var studentLocal StudentLocal
	db.First(&studentLocal) // 取第一條到student

	js, _ = json.Marshal(studentLocal)
	fmt.Println(string(js))
	// {"Id":1,"Name":"張三","Age":20,"Sex":"男","CreateAt":"2022-12-06 17:49:06"}

	b, _ := studentLocal.CreateAt.MarshalJSON()
	fmt.Println(string(b))
	// "2022-12-06 17:49:06"

	value, _ := studentLocal.CreateAt.Value()
	fmt.Println(value)
	// 2022-12-06 17:49:06
}

到此這篇關(guān)于go語言中g(shù)orm時(shí)間格式化的文章就介紹到這了,更多相關(guān)gorm時(shí)間格式化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang Copier入門到入坑探究

    Golang Copier入門到入坑探究

    這篇文章主要為大家介紹了Golang Copier入門到入坑探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Go實(shí)現(xiàn)后臺(tái)任務(wù)調(diào)度系統(tǒng)的實(shí)例代碼

    Go實(shí)現(xiàn)后臺(tái)任務(wù)調(diào)度系統(tǒng)的實(shí)例代碼

    平常我們?cè)陂_發(fā)API的時(shí)候,前端傳遞過來的大批數(shù)據(jù)需要經(jīng)過后端處理,如果后端處理的速度快,前端響應(yīng)就快,反之則很慢,影響用戶體驗(yàn),為了解決這一問題,需要我們自己實(shí)現(xiàn)后臺(tái)任務(wù)調(diào)度系統(tǒng),本文將介紹如何用Go語言實(shí)現(xiàn)后臺(tái)任務(wù)調(diào)度系統(tǒng),需要的朋友可以參考下
    2023-06-06
  • Go語言中的上下文取消操作詳解

    Go語言中的上下文取消操作詳解

    這篇文章主要給大家介紹了關(guān)于Go語言中上下文取消操作的相關(guān)資料,本文將解釋我們?nèi)绾卫蒙舷挛膸斓娜∠匦裕⑼ㄟ^一些模式和最佳實(shí)踐來使用取消,使你的程序更快、更健壯。需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • Go語言開發(fā)保證并發(fā)安全實(shí)例詳解

    Go語言開發(fā)保證并發(fā)安全實(shí)例詳解

    這篇文章主要為大家介紹了Go語言開發(fā)保證并發(fā)安全實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Golang內(nèi)存管理之垃圾收集器詳解

    Golang內(nèi)存管理之垃圾收集器詳解

    這篇文章我們主要介紹垃圾收集器的設(shè)計(jì)原理以及Golang垃圾收集器的實(shí)現(xiàn)原理,文中有詳細(xì)的代碼示例及圖文介紹,感興趣的小伙伴跟著小編一起來學(xué)習(xí)吧
    2023-06-06
  • Golang交叉編譯之跨平臺(tái)編譯使用詳解

    Golang交叉編譯之跨平臺(tái)編譯使用詳解

    這篇文章主要為大家介紹了Golang交叉編譯之跨平臺(tái)編譯使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • go判斷文件夾是否存在并創(chuàng)建的實(shí)例

    go判斷文件夾是否存在并創(chuàng)建的實(shí)例

    這篇文章主要介紹了go判斷文件夾是否存在,并創(chuàng)建的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Go使用chan或context退出協(xié)程示例詳解

    Go使用chan或context退出協(xié)程示例詳解

    這篇文章主要為大家介紹了Go使用chan或context退出協(xié)程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • 解決Golang在Web開發(fā)時(shí)前端莫名出現(xiàn)的空白換行

    解決Golang在Web開發(fā)時(shí)前端莫名出現(xiàn)的空白換行

    最近在使用Go語言開發(fā)Web時(shí),在前端莫名出現(xiàn)了空白換行,找了網(wǎng)上的一些資料終于找到了解決方法,現(xiàn)在分享給大家,有需要的可以參考。
    2016-08-08
  • Go語言中的Iota關(guān)鍵字

    Go語言中的Iota關(guān)鍵字

    這篇文章介紹了Go語言中的Iota關(guān)鍵字,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07

最新評(píng)論