jjzjj

go - 是否可以在 Golang 类型断言中使用反射数组类型?

我需要检查interface{}是否为数组,如果是则创建相应的slice。不幸的是,我事先不知道数组长度。例如:import("reflect")funcAnythingToSlice(ainterface{})[]interface{}{rt:=reflect.TypeOf(a)switchrt.Kind(){casereflect.Slice:slice,ok:=a.([]interface{})ifok{returnslice}//itworkscasereflect.Array://returna[:]//itdoesn'twork:cannotslicea(typeinter

go - 通过 fmt.Sscan 设置结构值

我想在map[string]string和自定义Go结构之间同步状态,得出的结论是解析它的最简单方法是使用fmt.Sscan领域。不幸的是,直接方法不起作用(playground):varSstruct{Iint}f:=reflect.Indirect(reflect.ValueOf(&S)).Field(0)fmt.Sscan("10",f.Interface())fmt.Println(S)//{0}然而,引入一个中间值并使用Set()解决了这个问题:nv:=reflect.New(f.Type())fmt.Sscan("10",nv.Interface())f.Set(refle

golang递归地反射(reflect)字段类型和值

在golang中,我想通过一个结构递归反射(reflect),得到字段的名称,它的类型和值。这里的代码帮我反射(reflect)了golangrecurisivereflection问题是,当我尝试提取值时,当我在ptr值上反射(reflect)该值时,我总是感到panic。是否可以反射(reflect)这两种类型,并继续传递值直到我到达原语,然后打印字段名称、类型和值?这是我修改的代码:funcprintType(prefixstring,treflect.Type,vreflect.Valuevisitedmap[reflect.Type]bool){//Printthenameo

go - 如何使用 reflect.Type 执行类型断言

这个问题在这里已经有了答案:golangtypeassertionusingreflect.Typeof()(6个答案)关闭6个月前。我知道反射在go中通常不受欢迎,但就我目前的目的而言,我很确定它是最好的解决方案。本质上我的项目是cli工具,它会根据传入的命令输出一个xml查询并返回相应的结果。每个命令请求都有一些样板代码,其中填充默认值并验证提供的值。所以我有一系列基于Command结构的Command对象,如下所示:typeCommandstruct{NamestringRequestinterface{}RequestTypereflect.TypeResponseinterf

golang 反射(reflect)到 []interface{}

我想创建一个迷你框架,它采用一个简单的结构并从中创建一个完整的crud。我已经开始了,“findOne、更新、创建、删除”正在运行。不是我在创建findAll方法时遇到问题。更清楚地说,我不知道如何使用反射将我的ptr寻址到结构数组。这里是findOne函数的一个小例子。typecompanystruct{IdintNamestring}comp.InitModel(newDbConnection(),&comp)在InitModel中,我可以用以下内容填充指向公司的指针://m.caller=pointertotheptrtocomp(struct)callerV:=reflect.

go - 将反射值转换到 golang 中?

是否可以将reflect.Zero/New生成的值动态转换回任意类型?https://blog.golang.org/laws-of-reflection似乎不建议(因为go是静态类型的)。据我所知,这似乎限制了反射的使用,因为您始终需要了解您正在使用的类型。这是我的意思的一个例子:packagemainimport("fmt""reflect")typeAstruct{Namestring}funcmain(){a:=&A{Name:"Dave"}fmt.Println(a)//createanilpointerofanarbitrarytypedynamicType:=reflec

go - type reflect.Value 不支持索引

我有一个通用类型数组interface{},我想检查该数组是否在其JSON对象之一中包含特定值。history:=reflect.ValueOf(historyInterface)fori:=0;i下面是每次迭代的测试结果:firstiterationmap[id:5afbff19bf07c79c19ed9af9date:Saturday,January21,20179:21PMcertitude:33]seconditerationmap[id:afbff198658487a3e3e376bdate:Thursday,March3,20162:24PMcertitude:30]inv

Go:再次将类型为 uuid.UUID (satori) 的 reflect.Value 转换回 uuid.UUID

我试图再次将反射的UUID转换回实际的UUID对象,但找不到方法,当我打印反射值时它看起来是正确的,但在尝试转换时我找不到方法。packagemainimport("fmt""reflect"uuid"github.com/satori/go.uuid")funcmain(){value:=uuid.Must(uuid.NewV4())reflectedValue:=reflect.ValueOf(value)fmt.Println(reflectedValue)result:=reflectedValue.String()fmt.Println(result)}输出:$gorunma

go - 无法设置类型为接口(interface)的结构的字段{}

我一直在与reflect包作斗争。下面的代码符合我的预期:packagemainimport("reflect""log")typeCarstruct{Modelstring}typePersonstruct{NamestringCars[]Car}funcModifyIt(parentinterface{},fieldNamestring,valinterface{}){slice:=reflect.ValueOf(parent).Elem()nth:=slice.Index(0)//row:=nth.Interface()//thislinecauseserrorsrow:=nth

C# : Serialize objects to XML without reflection

在应用程序中,我们可以保存应用程序的当前状态及其配置(可能非常庞大)。我们正在使用XmlSerializer。我们现在在XML中只有我们需要的东西(所有XmlIgnore都已到位),并且存储整个配置(约50-100MB的文件)非常慢。我们需要继续将此配置存储为XML,但我们希望避免:反射(reflection),就是要慢实现IXmlSerializable接口(interface)我们的想法是在每个对象中实现一个方法,我们可以在其中注册我们想要序列化的字段/属性,然后有一个能够读取我们想要的内容的SerializationManager序列化,然后写入。像这样,对象不知道它们将被呈现的