XObject

package
v1.1.0 Latest Latest
Warning

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

Go to latest
Published: Nov 9, 2025 License: MIT Imports: 3 Imported by: 1

README

XObject

Release Reference Report DeepWiki Discord

提供了 Go 语言面向对象编程的增强支持,包括对象构造、实例管理和序列化功能。

功能特性

  • 对象构造器:支持泛型的对象构造和初始化
  • 实例指针:支持对象实例的自引用
  • 参数化构造:支持最多三个参数的构造函数
  • JSON 序列化:支持对象与 JSON 的相互转换

使用手册

1. 对象构造
1.1 基础构造
// 定义结构体
type MyStruct struct {
    XObject.ICtor // 实现无参构造
    Name string
}

// 实现构造函数
func (ms *MyStruct) Ctor(obj any) {
    ms.Name = "默认名称"
}

// 创建实例
obj := XObject.New[MyStruct]()
1.2 参数化构造
// 定义结构体
type MyStruct struct {
    XObject.ICtorT1[string] // 实现带参构造
    Name string
}

// 实现构造函数
func (ms *MyStruct) CtorT1(obj any, name string) {
    ms.Name = name
}

// 创建实例
obj := XObject.NewT1[MyStruct, string]("张三")
1.3 实例自引用
// 定义结构体
type MyStruct struct {
    XObject.IThis[MyStruct] // 实现自引用
    this *MyStruct
}

// 实现自引用方法
func (ms *MyStruct) This() *MyStruct {
    return ms.this
}

// 在构造函数中初始化
func (ms *MyStruct) Ctor(obj any) {
    ms.this = obj.(*MyStruct)
}
2. 序列化
2.1 JSON 转换
// 对象转 JSON
json, err := XObject.ToJson(obj)
json, err := XObject.ToJson(obj, true) // 格式化输出

// JSON 转对象
err := XObject.FromJson(json, &obj)
2.2 字节转换
// 对象转字节数组
bytes, err := XObject.ToByte(obj)

// 字节数组转对象
err := XObject.FromByte(bytes, &obj)

常见问题

1. 为什么需要实现构造器接口?

构造器接口提供了对象初始化的标准方式:

  • 确保对象在创建时正确初始化
  • 支持依赖注入和参数化构造
  • 便于实现工厂模式和对象池
  • 统一的对象生命周期管理
2. 如何选择合适的构造器?

根据初始化参数的数量选择:

  • ICtor:无参数初始化
    • 适用于简单对象
    • 默认值初始化
    • 单例模式
  • ICtorT1:一个参数
    • 基本配置初始化
    • 依赖注入
  • ICtorT2:两个参数
    • 复杂配置初始化
    • 多依赖注入
  • ICtorT3:三个参数
    • 完整状态初始化
    • 完整依赖注入
3. JSON 序列化失败的常见原因
  1. 字段可见性:

    • 确保需要序列化的字段首字母大写
    • 使用 json 标签控制序列化行为
  2. 类型兼容:

    • 确保字段类型支持序列化
    • 注意数字类型的精度
    • 处理时间类型的格式
  3. 循环引用:

    • 避免对象间的循环引用
    • 使用指针打破循环依赖
    • 考虑使用自定义 MarshalJSON
4. 性能优化建议
  1. 对象创建:

    • 使用对象池复用实例
    • 避免频繁创建临时对象
    • 合理使用指针和值类型
  2. 序列化优化:

    • 使用字节数组而不是字符串
    • 避免不必要的格式化
    • 考虑使用二进制序列化
  3. 内存管理:

    • 及时释放不用的对象
    • 避免大对象的深拷贝
    • 使用 sync.Pool 管理临时对象

更多问题,请查阅问题反馈

项目信息

Documentation

Overview

XObject 提供了 Go 语言面向对象编程的增强支持,包括对象构造、实例管理和序列化功能。

功能特性

  • 对象构造器:支持泛型的对象构造和初始化
  • 实例指针:支持对象实例的自引用
  • 参数化构造:支持最多三个参数的构造函数
  • JSON 序列化:支持对象与 JSON 的相互转换

使用手册

1. 对象构造

1.1 基础构造

// 定义结构体
type MyStruct struct {
	XObject.ICtor // 实现无参构造
	Name string
}

// 实现构造函数
func (ms *MyStruct) Ctor(obj any) {
	ms.Name = "默认名称"
}

// 创建实例
obj := XObject.New[MyStruct]()

1.2 参数化构造

// 定义结构体
type MyStruct struct {
	XObject.ICtorT1[string] // 实现带参构造
	Name string
}

// 实现构造函数
func (ms *MyStruct) CtorT1(obj any, name string) {
	ms.Name = name
}

// 创建实例
obj := XObject.NewT1[MyStruct, string]("张三")

1.3 实例自引用

// 定义结构体
type MyStruct struct {
	XObject.IThis[MyStruct] // 实现自引用
	this *MyStruct
}

// 实现自引用方法
func (ms *MyStruct) This() *MyStruct {
	return ms.this
}

// 在构造函数中初始化
func (ms *MyStruct) Ctor(obj any) {
	ms.this = obj.(*MyStruct)
}

2. 序列化

2.1 JSON 转换

// 对象转 JSON
json, err := XObject.ToJson(obj)
json, err := XObject.ToJson(obj, true) // 格式化输出

// JSON 转对象
err := XObject.FromJson(json, &obj)

2.2 字节转换

// 对象转字节数组
bytes, err := XObject.ToByte(obj)

// 字节数组转对象
err := XObject.FromByte(bytes, &obj)

更多信息请参考模块文档。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func FromByte

func FromByte[T any](data []byte, obj T) error

FromByte 将字节数组转换为指定类型的对象。 如果转换失败,返回错误信息。

func FromJson

func FromJson[T any](data string, obj T) error

FromJson 将 JSON 字符串转换为指定类型的对象。 如果转换失败,返回错误信息。

func New

func New[T any]() *T

New 创建指定类型的对象实例。 如果对象实现了 ICtor 接口,则调用其构造函数。

func NewT1

func NewT1[T any, T1 any](arg1 T1) *T

NewT1 创建指定类型的对象实例,并使用一个参数初始化。 如果对象实现了 ICtorT1 接口,则调用其构造函数。

func NewT2

func NewT2[T any, T1 any, T2 any](arg1 T1, arg2 T2) *T

NewT2 创建指定类型的对象实例,并使用两个参数初始化。 如果对象实现了 ICtorT2 接口,则调用其构造函数。

func NewT3

func NewT3[T any, T1 any, T2 any, T3 any](arg1 T1, arg2 T2, arg3 T3) *T

NewT3 创建指定类型的对象实例,并使用三个参数初始化。 如果对象实现了 ICtorT3 接口,则调用其构造函数。

func ToByte

func ToByte(v any) ([]byte, error)

ToByte 将对象转换为字节数组。 如果对象是字符串类型,直接返回其字节表示。 如果转换失败,返回 nil 和错误信息。

func ToJson

func ToJson(v any, pretty ...bool) (string, error)

ToJson 将对象转换为 JSON 字符串。 支持通过 pretty 参数控制是否格式化输出。 如果转换失败,返回空字符串和错误信息。

Types

type ICtor

type ICtor interface {
	// Ctor 执行对象的初始化操作。
	// obj 为对象实例的指针。
	Ctor(obj any)
}

ICtor 定义了对象的无参构造器接口。

type ICtorT1

type ICtorT1[T1 any] interface {
	// CtorT1 执行对象的初始化操作。
	// obj 为对象实例的指针。
	// arg1 为第一个参数。
	CtorT1(obj any, arg1 T1)
}

ICtorT1 定义了带一个参数的构造器接口。 T1 为第一个参数的类型。

type ICtorT2

type ICtorT2[T1 any, T2 any] interface {
	// CtorT2 执行对象的初始化操作。
	// obj 为对象实例的指针。
	// arg1 为第一个参数。
	// arg2 为第二个参数。
	CtorT2(obj any, arg1 T1, arg2 T2)
}

ICtorT2 定义了带两个参数的构造器接口。 T1 为第一个参数的类型。 T2 为第二个参数的类型。

type ICtorT3

type ICtorT3[T1 any, T2 any, T3 any] interface {
	// CtorT3 执行对象的初始化操作。
	// obj 为对象实例的指针。
	// arg1 为第一个参数。
	// arg2 为第二个参数。
	// arg3 为第三个参数。
	CtorT3(obj any, arg1 T1, arg2 T2, arg3 T3)
}

ICtorT3 定义了带三个参数的构造器接口。 T1 为第一个参数的类型。 T2 为第二个参数的类型。 T3 为第三个参数的类型。

type IThis

type IThis[T any] interface {
	// This 返回对象实例的指针。
	This() *T
}

IThis 定义了对象实例的自引用接口。 T 为实例的具体类型。

Jump to

Keyboard shortcuts

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