go的反射操作reflect实践

devtools/2024/9/23 7:19:45/

 通过反射机制,找到相应的Left或者Right广告

type SearchAdsObj struct {Left     PositionAdsObj `json:"left"`Right    PositionAdsObj `json:"right"`
}func getFieldByName(obj SearchAdsObj, fieldName string) (interface{}, error) {fmt.Printf("getFieldByName: %s \n", fieldName)val := reflect.ValueOf(obj)// fmt.Printf("getFieldByName val %v \n", val)if val.Kind() != reflect.Struct {fmt.Printf("getFieldByName input is not a struct")return nil, fmt.Errorf("getFieldByName input is not a struct")}field := val.FieldByName(fieldName)if !field.IsValid() {fmt.Printf("getFieldByName field %s not found in the struct", fieldName)return nil, fmt.Errorf("getFieldByName field %s not found in the struct", fieldName)}var inter interface{} = fieldif myStruct, ok := inter.(PositionAdsObj); ok {// 如果转换成功,myStruct现在包含MyStruct类型的值return myStruct, nil} else {// 如果转换失败,说明myInterface不包含MyStruct类型的值fmt.Println("Conversion failed, myInterface does not contain a PositionAdsObj")return nil, fmt.Errorf("Conversion failed, myInterface does not contain a PositionAdsObj")}
}

注意 getFieldByName 传入的是SearchAdsObj具体类型的实体,而不能是:obj interface{}

func getFieldByName(obj interface{}, fieldName string) (interface{}, error) {

因为反射访问结构体内部字段时候,需要操作的对象是一个实际类型的结构体


http://www.ppmy.cn/devtools/25252.html

相关文章

Git进阶命令与技巧

Git进阶命令与技巧 重置(reset)、回退(checkout) 重置(reset)和回退(checkout)是两种操作版本控制系统中的代码回退的方法。 重置(reset)操作是将当前分支的…

【C语言进阶】程序编译中的预处理操作

📚作者简介:爱编程的小马,正在学习C/C,Linux及MySQL.. 📚以后会将数据结构收录为一个系列,敬请期待 ● 本期内容讲解C语言中程序预处理要做的事情 目录 1.1 预处理符号 1.2 #define 1.2.1 #define定义标识…

可能内存溢出的高级排序算法-归并排序

归并排序 归并排序在经典递归实现中需要的额外空间相对较多。这是因为在归并排序的过程中,需要与原始数组大小相同的额外空间来存储临时合并的数组。所以,其空间复杂度为O(n),其中n表示待排序数组的长度。在递归过程中,需要创建临…

【目标检测】Yolov7 的 ELAN 和 E-ELAN 模块演进(涉及到分组卷积,cardinality,梯度路径)

感觉从 YOLOv6 开始,YOLOv6 系列感觉优化点都着重于推理速度上面,YOLOv6 的 RepBlock 重参数化,给我的感觉就是算子融合进行加速。而 YOLOv7,为了在各种架构的边缘设备上获得极致的推理速度。 YOLOv7 的工作: 新的 b…

星火首发“多情感超拟人合成”,安卓端下载量国内领先

【头部财经】日前,据七麦数据显示,截至4月26日,科大讯飞的讯飞星火APP在安卓端下载量已超过9600万次,成为国内工具类通用大模型APP的领跑者,讯飞星火凭借其前沿技术和卓越性能,赢得了广大用户的信赖和支持。…

MS8258D高增益带宽积 FET 输入放大器

MS8258D 是一款具有 CMOS 输入的低噪声运算放大 器,适用于宽带跨阻和电压放大器应用。 当将该器件配置为跨阻放大器 (TIA) 时, 7GHz 增益 带宽积 (GBWP) 可为高跨阻增益下实现宽闭环带宽的应 用提供支持。 MS8258D 具有反馈引脚 (FB) &#x…

Linux 高级网络设置

1. rp_filter 逆向路由检查 rp_filter (Reverse Path Filtering)参数定义了网卡对接收到的数据包进行反向路由验证的规则。他有三个值,0、1、2,具体含意如下: 0:关闭反向路由校验1:开启严格的…

uni框架下的前端小知识

<movable-area> 和 <movable-view> 组件来创建一个可以移动的区域&#xff0c;这通常用于模拟地图或座位图等场景的拖动效果。 1、direction&#xff1a;移动方向&#xff0c;可选值为all、vertical、horizontal分别表示所有方向、垂直、水平方向。 2、inertia&am…