当前位置: 首页 > 面试题库 >

如何动态创建少一个属性的结构?

金理
2023-03-14
问题内容

有没有办法复制通用结构(即属性名称未知的结构)并跳过单个已知属性?

这是我所知道的:

  • 我函数的参数-我将称为参数myData-类型interface{}
  • myData 是一个结构。
  • myData具有已知的性质path
  • myData 具有0到6左右的其他属性,这些属性都不是先验的。
  • 一旦删除该path属性,那么“剩余”就是30种可能的结构类型之一。

所以我想剥离path出来myData(或更精确地进行复制,它省略path),所以生成的代码的各个位,尝试了结构迫使其可能的类型之一就能成功。

我已经找到了通过反射复制结构的示例,但是它们通常会创建一个 具有相同基础类型 的空结构,然后将其填充。因此,甚至有可能删除我概述的属性…?


问题答案:

您可以用来reflect.StructOf根据字段列表动态创建结构。

package main

import (
    "fmt"
    "reflect"
)

type A struct {
    Foo string
    Bar int
    Baz bool // to be skipped
}

type B struct {
    Foo string
    Bar int
}

func main() {
    av := reflect.ValueOf(A{"hello", 123, true})

    fields := make([]reflect.StructField, 0)
    values := make([]reflect.Value, 0)
    for i := 0; i < av.NumField(); i++ {
        f := av.Type().Field(i)
        if f.Name != "Baz" {
            fields = append(fields, f)
            values = append(values, av.Field(i))
        }
    }

    typ := reflect.StructOf(fields)
    val := reflect.New(typ).Elem()
    for i := 0; i < len(fields); i++ {
        val.Field(i).Set(values[i])
    }

    btyp := reflect.TypeOf(B{})
    bval := val.Convert(btyp)

    b, ok := bval.Interface().(B)
    fmt.Println(b, ok)
}


 类似资料:
  • 本文向大家介绍js中动态创建json,动态为json添加属性、属性值的实例,包括了js中动态创建json,动态为json添加属性、属性值的实例的使用技巧和注意事项,需要的朋友参考一下 如下所示: 在js中,一个[]认为是数组;{}认为是Json对象; var json = {}; 定义一个Json对象; 为Json对象赋值: json[aa] = "xx"; eval 解析json报错 提示缺少“

  • 问题内容: 我在使用primefaces树实现实现动态树结构时遇到了一些麻烦。在primeface提供的展示柜中,代码的结构如下所示。但是,这是非常静态的。我试图弄清楚如何处理从数据库中获取的数据,在编译时树的深度是未知的。 我以为我可能需要某种递归方法来实现此目的,但我无法完全理解实现的样子。 有什么想法吗? 以下是primefaces的示例代码 问题答案:

  • 周期性的HttpJob任务的定义 是多次运行的job 采用Cron表达式进行定义运行规则 注意事项 最新版的hangfire已支持 6位数的Cron表达式(支持到秒级) 但是我在hangfire的dashbord扩展的Cron生成页面还不支持到秒级别(大家可以在google找可以生成6位的网站工具) 1. 进入hangfire的后台 点击 上侧栏【周期性作业】 如下图所示: 针对周期性作业 可以看

  • 如何基于应用程序动态定义bean。yml文件? 例如,YAML文件如下所示: 这将动态创建两个带有内容类型标题集的HTTPHeader。 下面是我现在如何定义bean: 如果我需要添加更多endpoint,我需要复制并粘贴这些bean,这是我想要避免的。 注意:这些动态bean不需要任何其他bean。我不确定这是否有什么不同。它只需要加载配置。

  • 我希望在从application.yaml文件中读取一些属性后创建bean,然后将它们注入到其他bean中。如何做到这一点?

  • 我正在编写一个定制的spring starter,其中需要根据应用程序中定义的属性注册一个相同类型的bean列表。属性 我在应用程序中有以下属性。属性 自动配置类的当前实现如下 我想简单地在spring boot应用程序中用qualifer自动连接我的bean,如下所示 如何更改autoconfigure类以创建多个具有属性文件中定义的不同名称的bean(在本例中,如何创建bean mybean2