草庐IT

Reflection

全部标签

reflection - 通过反射传递引用嵌套结构

typeClientstruct{IdintAgeintPrimaryContactContactNamestring}typeContactstruct{IdintClientIdintIsPrimaryboolEmailstring}以上是示例代码;我想要实现的目标如下:-使用反射循环遍历所有客户端结构字段-为每个“原始”字段设置一个使用反射的默认值-对于每个结构字段使用递归来应用上述步骤问题是,当对PrimaryContact字段进行内省(introspection)时,当我尝试为其任何字段设置值时,我最终会遇到以下panic:reflect.Value.Setusingunad

reflection - 通过反射获取阴影方法

我怎样才能通过反射获得阴影方法?在下面的代码中,我使用了MethodByName获取B类型的方法Test(),但我想从b.ATest(),所以我可以同时调用它们。packagemainimport("fmt""reflect")typeAstruct{}typeBstruct{A}func(self*A)Test(){fmt.Println("I'mA")}func(self*B)Test(){fmt.Println("I'mB")}funcmain(){b:=&B{}b.Test()//Thisoneshadowsb.A.Test()b.A.Test()//butitsoktocal

reflection - 在 Go 中,reflect.SliceOf() 的反函数是什么?

在围棋中,reflect.SliceOf()制作一个表示给定类型的slice的类型:SliceOfreturnstheslicetypewithelementtypet.Forexample,iftrepresentsint,SliceOf(t)represents[]int.但是,我已经有了[]int的类型,但想获得int的类型。有没有简单的方法可以做到这一点?(请注意,我以int为例。实际上,我所知道的只是我有一个slice,我需要找到slice中每个元素的类型。)我正在尝试使用反射从[]string填充bool、int、float或string的一部分...这是相关的部分:num

reflection - 我如何将 reflect.Value.Call() 与 nil 输入一起使用?

我想在Go中调用一个函数,对方法值使用reflect.Value.Call,并将nil作为参数传递。有关说明,请参见下面的代码。我曾尝试在输入数组中使用reflect.ValueOf(nil)和reflect.Value{},但第一次出现panic是因为nil没有值;当我将它传递给Call时,第二个panic,因为它是一个零reflect.Value。请注意,如代码所示,当然可以将nil传递给函数而无需反射,包括当该参数是接收者时。问题是:是否可以使用reflect.Value.Call调用函数,并将其中一个参数作为nil传递?您可以构建并运行以下代码:http://play.gola

reflection - Golang 反射改进

有人知道更好的方法吗?目标是将自定义字段从字符串再次转换回其int类型。switchval.Kind(){casereflect.Int:intID,err:=strconv.ParseInt(id,10,0)iferr!=nil{returnerr}val.Set(reflect.ValueOf(int(intID)))casereflect.Int8:intID,err:=strconv.ParseInt(id,10,8)iferr!=nil{returnerr}val.Set(reflect.ValueOf(int8(intID)))casereflect.Int16:intID

reflection - Reflect 认为 struct Value 也是一个 ptr?

我有一个类似这个演示的数据结构。如您所见,foo有一个指向bar的嵌入式指针:typefoostruct{*bar}typebarstruct{S[]byte}我正在像这样使用reflect包:functest(xinterface{}){varv=reflect.ValueOf(x)ifv.Kind()==reflect.Struct{fmt.Println("wasastruct")//panic:reflect:callofreflect.Value.ElemonstructValue//v=v.Elem()//panic:reflect:callofreflect.Value.

reflection - 如何使用反射在运行时更改方法实现?

我有这种类型的实现:typeAstruct{namestring}func(aA)getName()string{return"Mynameis"+a.name}如何使用反射更改此类型的方法getName()的实现?例如,我想使用下一个实现而不是当前的实现:funcnewGetName()string{return"testreflection"} 最佳答案 Go是一种编译型语言。因此,不可能在运行时修改事物的实现。您可以做的是更改函数指针指向的位置:vargetNamefunc(string)=func(namestring){r

reflection - Golang - 扫描所有类型的结构

我是围棋初学者。我可能认为多年来使用其他语言太传统了,但这就是我想在Go中做的事情。假设以下用例我有接口(interface)I。这个接口(interface)有函数,start()和stop()有许多实现接口(interface)的结构。结构A,结构B,结构C当应用程序启动时,我想在结构A、B和C上调用start()同样,当应用程序终止时,我想对A、B、C结构调用stop()。我不想在代码中的任何地方对结构A、B和C进行硬编码以调用启动/停止函数。这样当我稍后添加结构D(也实现接口(interface)I)时,代码将自动运行而无需修改。为了实现这一目标,我需要能够说“嘿,给我所有实现

reflection - 戈朗 : Function to determine the arity of functions?

是否可以编写一个函数来确定任意函数的元数,这样:1.funcmult_by_2(xint)int{return2*x}fmt.Println(arity(mult_by_2))//Prints12.funcadd(xint,yint)int{returnx+y}fmt.Println(arity(add))//Prints23.funcadd_3_ints(a,b,cint)int{returnb+a+c}fmt.Println(arity(add_3_ints))//Prints3 最佳答案 您可以使用reflect编写这样的函数

reflection - 将界面转换为其相关 map

例如,如果我有一个interface{}值最初是map[string]map[int64][]int64或任何其他类型的map,如何获取map的关键类型?或者更准确地说,如何将其转换为map[theKeyType]interface{}?funcTransverse(anyinterface{})string{res:=``switchany.(type){casestring:return``case[]byte:return``caseint,int64,int32:return``casefloat32,float64:return``casebool:return``casem