定义类型反序列化失败 #2057

Open
opened 2021-09-25 06:21:50 +00:00 by CyJaySong · 8 comments
Contributor
type DATETIME time.Time

\\\ 已经实现 FromDB 和 ToDB 并在 xormplus 里测试过


type Goods struct {
	UpdatedAt   xtime.DATETIME
}

当我某结构体包含定义类型时,反序列化失败

cannot convert time.Date(2021, time.January, 10, 13, 16, 6, 0, time.Local) as bytes

``` type DATETIME time.Time \\\ 已经实现 FromDB 和 ToDB 并在 xormplus 里测试过 type Goods struct { UpdatedAt xtime.DATETIME } ``` 当我某结构体包含定义类型时,反序列化失败 cannot convert time.Date(2021, time.January, 10, 13, 16, 6, 0, time.Local) as bytes
lunny added the
need
test
label 2021-09-26 00:40:27 +00:00
Author
Contributor

@lunny 还是不可以正常反序列化哎

@lunny 还是不可以正常反序列化哎
Author
Contributor

挖坟挖坟

挖坟挖坟
Owner

挖坟挖坟

Please send a PR with your test code.

> 挖坟挖坟 Please send a PR with your test code.
Author
Contributor
package main

import (
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"time"
	"xorm.io/xorm"
)

// DATETIME
type DATETIME time.Time

func (dt *DATETIME) FromDB(v []byte) (err error) {
	var xt time.Time
	if err = xt.UnmarshalText(v); err != nil {
		xt, err = time.ParseInLocation("2006-01-02 15:04:05", string(v), time.Local)
		return
	}
	*dt = DATETIME(xt)
	return
}

func (dt *DATETIME) ToDB() ([]byte, error) {
	if dt == nil {
		return nil, nil
	}
	b := make([]byte, 0, len("2006-01-02 15:04:05"))
	b = time.Time(*dt).AppendFormat(b, "2006-01-02 15:04:05")
	return b, nil
}

type User struct {
	Id        uint64   `xorm:"id pk autoincr"`
	CreatedAt DATETIME `xorm:"created_at created"`
}

func main() {
	db, err := xorm.NewEngine("mysql", "")
	var user User
	if _, err = db.Where("id = ?", 16).Get(&user); err != nil {
		fmt.Printf("查询出错:%s", err)
		return
	}
	fmt.Printf("用户%d创建时间:%v", user.Id, user.CreatedAt)
}

``` package main import ( "fmt" _ "github.com/go-sql-driver/mysql" "time" "xorm.io/xorm" ) // DATETIME type DATETIME time.Time func (dt *DATETIME) FromDB(v []byte) (err error) { var xt time.Time if err = xt.UnmarshalText(v); err != nil { xt, err = time.ParseInLocation("2006-01-02 15:04:05", string(v), time.Local) return } *dt = DATETIME(xt) return } func (dt *DATETIME) ToDB() ([]byte, error) { if dt == nil { return nil, nil } b := make([]byte, 0, len("2006-01-02 15:04:05")) b = time.Time(*dt).AppendFormat(b, "2006-01-02 15:04:05") return b, nil } type User struct { Id uint64 `xorm:"id pk autoincr"` CreatedAt DATETIME `xorm:"created_at created"` } func main() { db, err := xorm.NewEngine("mysql", "") var user User if _, err = db.Where("id = ?", 16).Get(&user); err != nil { fmt.Printf("查询出错:%s", err) return } fmt.Printf("用户%d创建时间:%v", user.Id, user.CreatedAt) } ```
Author
Contributor
@lunny
Author
Contributor

@lunny 是我发code的方式不对么

@lunny 是我发code的方式不对么
Owner

Please send a pull request

Please send a pull request
Author
Contributor

@lunny 已提交PR

@lunny 已提交PR
Sign in to join this conversation.
No Milestone
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: xorm/xorm#2057
No description provided.