copor

package module
v0.0.0-...-7cdbae7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 12, 2023 License: BSD-3-Clause Imports: 6 Imported by: 0

README

copor

介绍

这是一个可以复制各种类型数据值,且对结构体的指定类型字段进行特殊处理的快捷工具

初始化
默认初始化

由于目前只有一个日期转字符串,默认已做了初始化,若使用默认格式则无需再次初始化

func init() {
    // 当前只有一个特殊处理,默认添加,后期特殊处理增多后,再去除
    AddSpecial(SpecialTimeToStr)
}
自定义初始化

可自定义转换格式值

copor.AddSpecial(copor.SpecialTimeToStr, func(value interface{}) interface{} {
    return value.(time.Time).Format("2006-01/02")
})
取消特殊转换
copor.StopSpecial(copor.SpecialTimeToStr)
参考例子
package main

import (
	"database/sql"
	"fmt"
	"time"

	"gitee.com/Virtual-Moon/copor"
)

type User struct {
	Id         int64        `json:"id"`
	Name       string       `json:"name"`
	CreatedAt  time.Time    `json:"created_at"`
	UpdatedAt  time.Time    `json:"updated_at"`
	ConnectAt  sql.NullTime `json:"connect_at"`
	LoginOutAt sql.NullTime `json:"login_out_at"`
}

type UserInfo struct {
	Id         int64  `json:"id"`
	Name       string `json:"name"`
	CreatedAt  string `json:"created_at"`
	UpdatedAt  string `json:"updated_at"`
	ConnectAt  string `json:"connect_at"`
	LoginOutAt string `json:"login_out_at"`
}

func TestDefault() {
	fmt.Println("测试无特殊转换")
	copor.StopSpecial(copor.SpecialTimeToStr)
	u := User{
		Id:        1,
		Name:      "张三",
		CreatedAt: time.Now().AddDate(0, 0, -1).Add(-600),
		UpdatedAt: time.Now(),
		ConnectAt: sql.NullTime{
			Time:  time.Now(),
			Valid: true,
		},
		LoginOutAt: sql.NullTime{
			Time:  time.Time{},
			Valid: false,
		},
	}
	fmt.Println("原数据:", u)
	info := UserInfo{}
	copor.Copy(&info, u)
	fmt.Println("新数据:", info)
}

func TestDefaultChange() {
	fmt.Println("测试使用默认特殊转换")
	//copor.AddSpecial(copor.SpecialTimeToStr)
	u := User{
		Id:        1,
		Name:      "张三",
		CreatedAt: time.Now().AddDate(0, 0, -1).Add(-600),
		UpdatedAt: time.Now(),
		ConnectAt: sql.NullTime{
			Time:  time.Now(),
			Valid: true,
		},
		LoginOutAt: sql.NullTime{
			Time:  time.Time{},
			Valid: false,
		},
	}
	fmt.Println("原数据:", u)
	info := UserInfo{}
	copor.Copy(&info, u)
	fmt.Println("新数据:", info)
}

func TestCustomChange() {
	fmt.Println("测试使用自定义特殊转换")
	copor.AddSpecial(copor.SpecialTimeToStr, func(value interface{}) interface{} {
		v, ok := value.(time.Time)
		if ok {
			return v.Format("2006-01-02")
		}
		v2, ok2 := value.(sql.NullTime)
		if ok2 {
			if v2.Valid {
				return v2.Time.Format("2006/01/02")
			} else {
				return ""
			}
		}
		return ""
	})
	u := User{
		Id:        1,
		Name:      "张三",
		CreatedAt: time.Now().AddDate(0, 0, -1).Add(-600),
		UpdatedAt: time.Now(),
		ConnectAt: sql.NullTime{
			Time:  time.Now(),
			Valid: true,
		},
		LoginOutAt: sql.NullTime{
			Time:  time.Time{},
			Valid: false,
		},
	}
	fmt.Println("原数据:", u)
	info := UserInfo{}
	copor.Copy(&info, u)
	fmt.Println("新数据:", info)
}

func main() {
	TestDefaultChange()
	TestDefault()
	TestCustomChange()
}

Documentation

Index

Constants

View Source
const (
	SpecialTimeToStr = "specialTimeToString" // 时间型转时间字符串  "2006-01-02 15:04:05"
)

Variables

This section is empty.

Functions

func AddSpecial

func AddSpecial(change string, args ...ChangeFunc)

AddSpecial 添加特殊类型转换

func Copy

func Copy(toValue interface{}, fromValue interface{}) error

Copy 主体复制函数

func StopSpecial

func StopSpecial(change string)

StopSpecial 暂停特殊字段转换

Types

type ChangeFunc

type ChangeFunc func(value interface{}) interface{}

ChangeFunc 自定义转换函数 将原结构体字段值value转换成自己需要的值并返回 例:return value.(time.Time).Format("2006-01-02 15:04:05")

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL