iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > GO >通过反射提取通用结构体值
  • 452
分享到

通过反射提取通用结构体值

2024-04-04 23:04:25 452人浏览 泡泡鱼
摘要

本篇文章向大家介绍《通过反射提取通用结构体值》,主要包括,具有一定的参考价值,需要的朋友可以参考一下。问题内容我正在尝试将结构体的所有值提取到字符串切片中。 func structValues(i

本篇文章向大家介绍《通过反射提取通用结构体值》,主要包括,具有一定的参考价值,需要的朋友可以参考一下。

问题内容

我正在尝试将结构体的所有值提取到字符串切片中。

func structValues(item Item) []string {
    values := []string{}
    e := reflect.ValueOf(&item).Elem()

    for i := 0; i < e.NumField(); i++ {
        fieldValue := e.Field(i).Interface()
        values = append(values, fmt.Sprintf("%#v", fieldValue))
    }
    return values
}

我想将此函数与任何结构一起使用,所以我想我可以将类型签名更改为 func structvalues(item interface{}) 但后来我感到恐慌:

恐慌:反射:在接口 value 上调用reflect.value.numfield

工作示例:https://repl.it/@fny/stackoverflow61719532


解决方案


我想将此函数与任何结构一起使用...

可以执行此操作,但请注意,它会放弃类型安全。此外,执行此操作的唯一方法是允许使用 any 类型进行调用,而不仅仅是某种结构类型的任何类型,因此您必须检查您得到的实际上是某种结构类型:

func structvalues(item interface{}) {
    if reflect.valueof(item).kind() != reflect.struct {
        ... do something here ...
    }

完成该检查(或稍微推迟它,或省略它以允许 reflect 恐慌),然后您需要将 reflect.valueof(&item).elem() 替换为更简单的 reflect.valueof(item)

如果您希望允许指向结构以及实际结构的指针,您可以通过首先使用 reflect.indirect 来非常简单地实现这一点。结果是:

func structValues(item interface{}) []string {
    e := reflect.Indirect(reflect.ValueOf(item))
    if e.Kind() != reflect.Struct {
        panic("not a struct")
    }
    values := []string{}
    for i := 0; i < e.NumField(); i++ {
        fieldValue := e.Field(i).Interface()
        values = append(values, fmt.Sprintf("%#v", fieldValue))
    }
    return values
}

如果您想确保调用者在拥有指针时执行自己的间接操作,请省略 reflect.indirect

(请注意,这里的 panic 不是很友好。如果您想要正确的调试,请考虑直接使用 %v%#v 打印结构,或者使用更彻底的 spew package。)

Complete example here on the Go Playground 使用您自己的链接中的 type item struct

到这里,我们也就讲完了《通过反射提取通用结构体值》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注编程网公众号,带你了解更多关于的知识点!

您可能感兴趣的文档:

--结束END--

本文标题: 通过反射提取通用结构体值

本文链接: https://www.lsjlt.com/news/596606.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 通过反射提取通用结构体值
    本篇文章向大家介绍《通过反射提取通用结构体值》,主要包括,具有一定的参考价值,需要的朋友可以参考一下。问题内容我正在尝试将结构体的所有值提取到字符串切片中。 func structValues(i...
    99+
    2024-04-04
  • golang通过反射设置结构体变量的值
    如果需要动态设置struct变量field的情况下, 可以利用reflect来完成。 代码如下: package main import ( "fmt" "reflect" ...
    99+
    2024-04-02
  • java中怎么通过反射获取属性值
    在Java中,可以通过反射来获取属性的值。下面是一个示例代码:```javaimport java.lang.reflect.Fie...
    99+
    2023-09-07
    java
  • 使用反射获取结构体字段的指针值
    珍惜时间,勤奋学习!今天给大家带来《使用反射获取结构体字段的指针值》,正文内容主要涉及到等等,如果你正在学习Golang,或者是对Golang有疑问,欢迎大家关注我!后面我会持续更新相关内容的,希望...
    99+
    2024-04-04
  • java中怎么通过反射获取字段的值
    通过反射获取字段的值,可以使用Java中的Field类的get()方法。首先,需要获取字段对应的Class对象,然后再通过Class...
    99+
    2023-09-27
    java
  • 无法从通过 YAML 获取的映射中提取键/值对
    php小编小新在使用YAML获取映射时,时常会遇到一个问题,即无法从通过YAML获取的映射中提取键/值对。这个问题在实际开发中是非常常见的,它可能会导致无法正确读取配置文件或者无法获取...
    99+
    2024-02-09
  • 如何通过名称获取结构体的属性?
    偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍《如何通过名称获取结构体的属性?》,这篇文章主要会讲到等等知识点,不知道大家对其都有多少了解,下面我们就一起来看...
    99+
    2024-04-04
  • 通过反射器指针设置map1和map2的值
    php小编柚子在这里为大家介绍一种使用反射器指针的方法来设置map1和map2的值。通过反射器指针,我们可以方便地访问和修改对象的属性和方法,实现对map1和map2的值的动态设置。这...
    99+
    2024-02-09
  • Java通过反射注解赋值的方法详解
    目录问题描述最终解决if/else 普通解法通过反射注解赋值属性解题思路汇总某些字段的和总结源码前段时间,领导分配一个统计销售区域汇总的数据,解决方案使用到了反射获取注解,通过注解获...
    99+
    2024-04-02
  • golang中通过interface{}的通用结构图
    一分耕耘,一分收获!既然打开了这篇文章《golang中通过interface{}的通用结构图》,就坚持看下去吧!文中内容包含等等知识点...希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的...
    99+
    2024-04-04
  • Java中如何通过反射获取类的信息
    这篇文章主要为大家展示了Java中如何通过反射获取类的信息,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“Java中如何通过反射获取类的信息”这篇文章吧。Java的特点有哪些Java的特点有哪些1....
    99+
    2023-06-06
  • Java怎么通过反射获取Constructor、Field、Method对象
    这篇文章主要介绍了Java怎么通过反射获取Constructor、Field、Method对象的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java怎么通过反射获取Constructor、Field、Metho...
    99+
    2023-07-02
  • Java如何通过反射获取Constructor、Field、Method对象
    目录前言使用反射技术获取构造器对象并使用使用反射技术获取成员变量对象并使用使用反射技术获取方法对象并使用总结前言 在实际开发中,通过反射可以得到一个类的完整结构,包括类的构造方法、类...
    99+
    2024-04-02
  • golang 如何用反射reflect操作结构体
    背景 需要遍历结构体的所有field 对于exported的field, 动态set这个field的value 对于unexported的field, 通过强行取址的方法来获取该值(...
    99+
    2024-04-02
  • golang怎么用反射reflect操作结构体
    这篇文章给大家分享的是有关golang怎么用反射reflect操作结构体的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。golang的优点golang是一种编译语言,可以将代码编译为机器代码,编译后的二进制文件可以...
    99+
    2023-06-14
  • Go - 通过索引访问结构体属性
    偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍《Go - 通过索引访问结构体属性》,这篇文章主要会讲到等等知识点,不知道大家对其都有多少了解,下面我们就一起来...
    99+
    2024-04-05
  • Java如何通过反射获取非静态内部类
    这篇“Java如何通过反射获取非静态内部类”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java如何通过反射获取非静态内部类...
    99+
    2023-07-05
  • 怎样通过反射获取非静态内部类实例
    目录一、无参构造函数二、有参构造函数总结一、无参构造函数 public class OuterClass { public void process() { ...
    99+
    2023-03-09
    反射实例 非静态内部类 反射非静态内部类
  • C语言实现通用数据结构之通用映射(HashMap)
    本文实例为大家分享了C语言实现通用数据结构之通用映射的具体代码,供大家参考,具体内容如下 这是在通用链表的基础上实现的映射,关于链表的实现参见:C语言实现通用数据结构之通用链表。 注...
    99+
    2024-04-02
  • 在Go中如何使用反射(reflection)设置结构体中的接口值
    学习Golang要努力,但是不要急!今天的这篇文章《在Go中如何使用反射(reflection)设置结构体中的接口值》将会介绍到等等知识点,如果你想深入学习Golang,可以关注我!我会持续更新相关...
    99+
    2024-04-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作