草庐IT

反射面

全部标签

pointers - 反射(reflect) : setting a field of a pointer

我正在尝试做这样的事情:使用名为env的标签定义结构:typeEnvstruct{Portstring`env:"PORT"`}使用os.Getenv调用一些函数来获取环境变量名称,并将其设置到结构中。现在,我有这个:packagemainimport("fmt""os""reflect")funcParseEnv(tinterface{},vinterface{}){it:=reflect.TypeOf(t)fori:=0;ihttp://play.golang.org/p/b8uPPVo4aV但是,如您所见,我必须将引用和指针都传递给我的函数。虽然这有效,但它非常丑陋(至少我认为是

pointers - 反射(reflect) : setting a field of a pointer

我正在尝试做这样的事情:使用名为env的标签定义结构:typeEnvstruct{Portstring`env:"PORT"`}使用os.Getenv调用一些函数来获取环境变量名称,并将其设置到结构中。现在,我有这个:packagemainimport("fmt""os""reflect")funcParseEnv(tinterface{},vinterface{}){it:=reflect.TypeOf(t)fori:=0;ihttp://play.golang.org/p/b8uPPVo4aV但是,如您所见,我必须将引用和指针都传递给我的函数。虽然这有效,但它非常丑陋(至少我认为是

pointers - 如何在不使用反射的情况下优雅地在 golang 中动态调用方法?

我正在使用反射来做到这一点:method_name:=CommandMap[command]thing:=reflect.ValueOf(self).MethodByName(method_name)thing_s:=fmt.Sprintf("%s",thing)ifthing_s==""{self.writeMessage(550,"notallowed")}else{thing.Call([]reflect.Value{})}但必须有更好的方法。上面代码的目的是摆脱:ifcommand=="this"{runThis()}elseifcommand=="that"{runThat(

pointers - 如何在不使用反射的情况下优雅地在 golang 中动态调用方法?

我正在使用反射来做到这一点:method_name:=CommandMap[command]thing:=reflect.ValueOf(self).MethodByName(method_name)thing_s:=fmt.Sprintf("%s",thing)ifthing_s==""{self.writeMessage(550,"notallowed")}else{thing.Call([]reflect.Value{})}但必须有更好的方法。上面代码的目的是摆脱:ifcommand=="this"{runThis()}elseifcommand=="that"{runThat(

Java反射源码学习之旅

1背景前段时间组内针对“拷贝实例属性是应该用BeanUtils.copyProperties()还是MapStruct”这个问题进行了一次激烈的battle。支持MapStruct的同学给出了他嫌弃BeanUtils的理由:因为用了反射,所以慢。这个理由一下子拉回了我遥远的记忆,在我刚开始了解反射这个Java特性的时候,几乎看到的每一篇文章都会有“Java反射不能频繁使用”、“反射影响性能”之类的话语,当时只是当一个结论记下了这些话,却没有深究过为什么,所以正好借此机会来探究一下Java反射的代码。2反射包结构梳理反射相关的代码主要在jdkrt.jar下的java.lang.reflect包下

golang 反射(reflect)值(value)类型的 slice

fmt.Println(v.Kind())fmt.Println(reflect.TypeOf(v))如何找出slice的反射值的类型?以上结果v.Kind=slicetypeof=reflect.Value当我尝试Set时,如果我创建了错误的slice,它将崩溃t:=reflect.TypeOf([]int{})s:=reflect.MakeSlice(t,0,0)v.Set(s)例如[]int{}而不是[]string{}所以我需要在创建反射值之前知道反射值的确切slice类型。 最佳答案 首先,我们需要通过测试确保我们正在处理

golang 反射(reflect)值(value)类型的 slice

fmt.Println(v.Kind())fmt.Println(reflect.TypeOf(v))如何找出slice的反射值的类型?以上结果v.Kind=slicetypeof=reflect.Value当我尝试Set时,如果我创建了错误的slice,它将崩溃t:=reflect.TypeOf([]int{})s:=reflect.MakeSlice(t,0,0)v.Set(s)例如[]int{}而不是[]string{}所以我需要在创建反射值之前知道反射值的确切slice类型。 最佳答案 首先,我们需要通过测试确保我们正在处理

go - 反射(reflect) (MethodByName) 无效

反射问题,使用MethodByName代码:packagemainimport("reflect""fmt")typeteststruct{}varserviceType=map[string]reflect.Value{"test":reflect.ValueOf(test{}),}func(t*test)prnt(){fmt.Println("testok")}funccallFunc(strctstring,fNamestring){s:=serviceType[strct].MethodByName(fName)if!s.IsValid(){fmt.Println("notco

go - 反射(reflect) (MethodByName) 无效

反射问题,使用MethodByName代码:packagemainimport("reflect""fmt")typeteststruct{}varserviceType=map[string]reflect.Value{"test":reflect.ValueOf(test{}),}func(t*test)prnt(){fmt.Println("testok")}funccallFunc(strctstring,fNamestring){s:=serviceType[strct].MethodByName(fName)if!s.IsValid(){fmt.Println("notco

reflection - 为什么我不能使用反射来获取 slice 的地址?

这是如何工作的:slice:=make([]string,0,10)sliceptr:=&slice这也是:sliceptr:=&[]string{"foo","bar","baz"}但这不是:sliceaddrval:=reflect.ValueOf([]string{"foo","bar","baz"}).Addr()panic:reflect.Value.Addrofunaddressablevalue编辑:总的来说,我想要做的是采用一个未知类型的结构,制作该类型的一部分结构并返回指向它的指针(我正在使用github.com/jmoiron/modl这需要一个指向slice的指针