Golang 简单易用的反射工具库, 支持设置嵌套结构体字段, 函数调用, etc.

本文介绍了xreflect,一个易用的Go语言反射库,支持设置结构体字段值、嵌套结构、函数和方法调用,以及接口检查等功能。提供了安装指南和使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

在实际业务开发中, 经常需要用到反射的能力, 比如结合远程配置动态修改结构体的字段, 这样无需发布即可实现功能变更, 再比如拓展插件的场景, 使用表驱动的方式调用一些异构的函数(无法抽象为接口)等.
这里对常用的操作进行了getter, setter的封装, 并增强了一些能力, 比如支持设置多层嵌套结构体的字段, 针对结构体指针自动创建等.

地址: https://github.com/morrisxyang/xreflect
中文文档: https://github.com/morrisxyang/xreflect/blob/main/README_CN.md
如果觉得有用欢迎 Star 和 PR, 有问题直接提Issue

xreflect

一个简单的, 易用的反射工具库.

主要支持如下特性:

  • 设置结构体字段值, 支持通过路径比如A.B.C设置嵌套结构体字段的值

  • 获取结构体字段的值, 类型, Tag 等.

  • 遍历结构体所有字段, 支持 select 模式和 range 模式, 如果使用深度遍历方法比如 FieldsDeep 将遍历所有嵌套结构.

  • 函数调用, 方法调用, 支持可变参数.

  • 新建实例, 判断接口实现等等.

安装和文档

安装命令 go get github.com/morrisxyang/xreflect.

文档见 https://pkg.go.dev/github.com/morrisxyang/xreflect

快速开始

设置嵌套结构体字段值

person := &Person{
	Name: "John",
	Age:  20,
	Country: Country{
		ID:   0,
		Name: "Perk",
	},
}

_ = SetEmbedField(person, "Country.ID", 1)

// Perk's ID: 1 
fmt.Printf("Perk's ID: %d \n", person.Country.ID)

调用函数

var addFunc = func(nums ...int) int {
		var sum int
		for _, num := range nums {
			sum += num
		}
		return sum
}

res, _ := CallFunc(addFunc1, 1, 2, 3)

// 6
fmt.Println(res[0].Interface())

核心方法

FieldX

SetX

StrcutFieldX

FuncX

Others

FAQ

FieldStrcutField 的区别是?

Field 返回 reflect.Value, StrcutField 返回 reflect.StrcutField.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值