prototype

package module
v0.0.0-...-a233b49 Latest Latest
Warning

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

Go to latest
Published: Mar 16, 2025 License: MIT Imports: 21 Imported by: 1

README

prototype

prototype 是一个用户克隆Go语言里任何变量的工具。

安装

go get -u github.com/go-leo/prototype

bool类型

目标 说明
bool bool 类型相同,直接复制
bool any 底层也是bool,直接复制
bool string strconv.FormatBool 转成字符串
bool int true:1, false:0
bool uint true:1, false:0
bool float true:1, false:0
bool pointer 解引用后再复制
bool struct sql.NullXXX、wrapperspb.XXXValue、structpb.Value、anypb.Any,底层还是基础类型,同上
bool ClonerFrom 自定义克隆

int类型

目标 说明
int int 类型相同,直接复制
int any 底层也是int,直接复制
int uint 类型转化
int float 类型转化
int bool 0:false, !0:true
int string strconv.FormatInt 转成字符串
int pointer 解引用后再复制
int struct sql.NullXXX、wrapperspb.XXXValue、structpb.Value、anypb.Any,底层还是基础类型,同上
int ClonerFrom 自定义克隆

uint类型

目标 说明
uint uint 类型相同,直接复制
uint any 底层也是uint,直接复制
uint int 类型转化
uint float 类型转化
uint bool 0:false, !0:true
uint string strconv.FormatIUint 转成字符串
uint pointer 解引用后再复制
uint struct sql.NullXXX、wrapperspb.XXXValue、structpb.Value、anypb.Any,底层还是基础类型,同上
uint ClonerFrom 自定义克隆

float类型

目标 说明
float float 类型相同,直接复制
float any 底层也是float,直接复制
float uint 类型转化
float int 类型转化
float bool 0:false, !0:true
float string strconv.FormatFloat 转成字符串
float pointer 解引用后再复制
float struct sql.NullXXX、wrapperspb.XXXValue、structpb.Value、anypb.Any,底层还是基础类型,同上
float ClonerFrom 自定义克隆

string类型

目标 说明
string string 类型相同,直接复制
string any 底层也是string,直接复制
string []byte 类型转化
string []rune 类型转化
string int strconv.ParseInt
string uint strconv.ParseUint
string float strconv.ParseFloat
string bool strconv.ParseBool
string pointer 解引用后再复制
string struct sql.NullXXX、wrapperspb.XXXValue、structpb.Value、anypb.Any,底层还是基础类型,同上
string ClonerFrom 自定义克隆

[]byte类型

目标 说明
[]byte []byte 类型相同,直接复制
[]byte string 类型相同,直接复制
[]byte any base64后再转
[]byte int 先转出string,然后在转
[]byte uint 先转出string,然后在转
[]byte float 先转出string,然后在转
[]byte bool 先转出string,然后在转
[]byte pointer 解引用后再复制
[]byte struct sql.NullXXX、wrapperspb.XXXValue、structpb.Value、anypb.Any,底层还是基础类型,同上
[]byte ClonerFrom 自定义克隆

time.Time类型

目标 说明
time.Time time.Time 类型相同,直接复制
time.Time struct sql.NullXXX、wrapperspb.XXXValue、structpb.Value、anypb.Any,底层还是一样,同上
time.Time string TimeToString 函数转成string
time.Time []byte TimeToString 函数转成string,在转[]byte
time.Time any 还是time.Time,类型相同,直接复制
time.Time int TimeToInt转成int,然后在转
time.Time uint TimeToInt转成int,然后在转
time.Time float TimeToInt转成int,然后在转
time.Time pointer 解引用后再复制
time.Time ClonerFrom 自定义克隆

slice类型

目标 说明
[]byte x 走 bytes克隆
slice any 底层还是slice,类型相同,直接复制
slice slice 元素类型转化,然后转成slice
slice array 元素类型转化,然后转成array
slice pointer 解引用后再复制
slice ClonerFrom 自定义克隆

array类型

目标 说明
array array 元素类型转化,然后转成array
array slice 元素类型转化,然后转成slice
array any 底层还是slice,类型相同,直接复制
array pointer 解引用后再复制
array ClonerFrom 自定义克隆

map类型

目标 说明
map map key和value类型转化,然后转成map
array any 底层一样,类型相同,直接复制
array struct 按key找到字段,根据字段类型然后复制
array pointer 解引用后再复制
array ClonerFrom 自定义克隆

struct 类型

目标 说明
sql.XXX X 底层类型复制
wrapperspb.XXX X 底层类型复制
anypb.Any X 接触原类型然后复制
array pointer 解引用后再复制
array ClonerFrom 自定义克隆

pointer类型

克隆类型 目标 说明
浅克隆,并且类型相同 X 指针赋值
深克隆或者类型不同 X 追溯到非指针类型在复制

interface类型

目标 说明
ClonerTo X 自定义克隆
其他接口 X 追溯到非接口类型在复制

Documentation

Index

Constants

View Source
const (
	NonPointer               Code = 1
	Nil                           = 2
	Overflow                      = 3
	NegativeNumber                = 4
	FailedParse                   = 5
	PointerCycle                  = 6
	UnsupportedType               = 7
	FailedUnmarshalNew            = 9
	FailedStringify               = 10
	FailedSetEmbeddedPointer      = 11
)

Variables

This section is empty.

Functions

func Clone

func Clone(tgt any, src any, opts ...Option) error

Clone 将值从 src 克隆到 tgt

Types

type Cloner

type Cloner func(labels []string, tgtVal reflect.Value, srcVal reflect.Value) (bool, error)

Cloner is a clone hook.

type ClonerFrom

type ClonerFrom interface {
	// CloneFrom 如果返回一个错误,则终止clone, 如果bool返回true,则代表当前克隆结束,如果返回false,则代表没有克隆,需要继续克隆。
	CloneFrom(src any) (bool, error)
}

ClonerFrom 自定义克隆方法,从源克隆到自己

type ClonerTo

type ClonerTo interface {
	// CloneTo 如果返回一个错误,则终止clone, 如果bool返回true,则代表当前克隆结束,如果返回false,则代表没有克隆结束,需要继续克隆。
	CloneTo(tgt any) (bool, error)
}

ClonerTo 自定义克隆方法,将自己克隆到目标

type Code

type Code int

type Error

type Error struct {
	Code       Code
	Labels     []string
	TargetType reflect.Type
	SourceType reflect.Type
	Value      string
	// contains filtered or unexported fields
}

func (Error) Error

func (e Error) Error() string

func (Error) Unwrap

func (e Error) Unwrap() error

type Option

type Option func(o *options)

func Cloners

func Cloners(f ...Cloner) Option

func Context

func Context(ctx context.Context) Option

func DisableDeepClone

func DisableDeepClone() Option

func EqualFold

func EqualFold(f func(t, s string) bool) Option

func GetterPrefix

func GetterPrefix(p string) Option

func IntToTime

func IntToTime(f func(i int64) time.Time) Option

func InterruptOnError

func InterruptOnError() Option

func SetterPrefix

func SetterPrefix(p string) Option

func StringToTime

func StringToTime(f func(s string) (time.Time, error)) Option

func TagKey

func TagKey(key string) Option

func TimeToInt

func TimeToInt(f func(t time.Time) int64) Option

func TimeToString

func TimeToString(f func(t time.Time) string) Option

Directories

Path Synopsis
cmd

Jump to

Keyboard shortcuts

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