草庐IT

reflect_mask_helper

全部标签

go - 如何使用 Golang 的 reflect 实例化一个 nil 错误?

我正在使用reflect.MakeFunc编写函数。该函数可以返回错误。当它成功时,我希望它为其错误类型的返回值返回nil。我怎样才能使用反射来做到这一点?目前我有这个:packagemainimport("fmt""reflect""errors")funcmain(){fmt.Println("Hello,playground")f:=func()error{returnnil}fn:=reflect.MakeFunc(reflect.TypeOf(f),func(args[]reflect.Value)[]reflect.Value{return[]reflect.Value{r

go - 当值是 reflect.Ptr 时如何使用 reflect.FieldByName

我有一个project函数,它返回一个slice,其中包含输入slice中每个结构或映射的名称的字段值。我遇到输入slice包含指向结构的指针的情况。我已经设置了一个递归函数来对值进行操作,但需要知道如何将类型reflect.Ptr转换为底层reflect.Struct。这是怎么做到的?任何其他设计建议表示赞赏。我对Go还是有点陌生​​。代码如下:funcproject(in[]interface{},propertystring)[]interface{}{varresult[]interface{}varappendValuefunc(list[]interface{},elint

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)时,代码将自动运行而无需修改。为了实现这一目标,我需要能够说“嘿,给我所有实现

go - 不可能类型开关案例 : ErrorType (type reflect. 类型)不能有动态类型 *os.SyscallError(缺少对齐方法)

尝试确定连接错误是什么并将值返回给程序。d:=net.Dialer{Timeout:20*time.Second}conn,errors:=d.Dial("tcp",fmt.Sprintf("%v:%v",host,port))iferrors!=nil{ifoerr,ok:=errors.(*net.OpError);ok{ErrorType:=reflect.TypeOf(oerr.Err)switchErrorType.(type){case*os.SyscallError:fmt.Println("connect:connectiontimedoutto",host,"onpo

go - Reflect showing different a different type than 错误

背景:我正在使用govmomi收集vmware的配置。我目前正在获取我需要的数据存储信息。我需要的字段之一是磁盘Naa。这可以在Vmfs字段下的VmfsDatastoreInfo结构中找到。问题:我在一个范围内循环,我认为Ds.Info属于VmfsDatastoreInfo类型,所以理论上我可以通过Ds.Info.Vmfs获得我需要的信息。当我引用这个时,我得到了错误:ds.Info.Vmfsundefined(typetypes.BaseDatastoreInfohasnofieldormethodVmfs)出于好奇,我使用反射进行了探索并执行了以下操作:fmt.Println(re

go - 使用 Go Reflect 调用函数

我想知道是否可以在不知道函数名称的情况下调用它并从中获取值。这让我找到了反射包,我已经非常接近了,但我不确定最后一步——如果有的话。如果我遗漏了一些明显的东西,请再次原谅我,这是我第一次尝试在Go中做任何事情,而不是设置它。当然,作为一种编译型语言,无需遍历事物来查找函数名称,我都知道它们,但这是我想看看是否可行的东西……我正在玩和学习。下面是代码。我真正想做的是在主线中提取ModuleBoot()和SomethingBoot()中设置的值,但到目前为止我能得到的只是结构信息。也许这就是它的方式,但也许有一个步骤或改变可以让它进入下一步。希望我正确复制了所有相关代码,以便按原样编译:/

go - 使用 pg.Array 时如何将 reflect.Pointer() 转换为 []string?

我正在使用go-pg编写自定义查询缓存系统,该系统采用传递给查询函数的查询参数并生成用于Redis的哈希键。我正在使用Go的reflect来检查有效的参数类型,直到我使用pg.Array作为传递的参数。Reflect给了我reflect.Ptr,但是我如何在调用switchcaseblock时提取指针的结构/数组?funcGenerateQueryCacheKey(args...interface{})string{varargumentString=""for_,arg:=rangeargs{v:=reflect.ValueOf(arg)switchv.Kind(){caserefl

reflection - 使用可嵌入结构的通用函数

我正在尝试编写一个函数来处理特定类型的对象并调用作为参数之一传递的特定方法。由于没有继承或泛型,我使用的是嵌入。(我不能使用接口(interface),因为您只能在其中定义方法,而且我还需要结构字段)。我是Go的新手,所以我肯定做错了什么。这是我的代码的简化版本:http://play.golang.org/p/r0mtDXtmWcpackagemainimport"fmt"import"reflect"typeAnimalstruct{Typestring}typeDogstruct{Animal}typeCatstruct{Animal}func(d*Dog)SayWoof(){f

reflection - 设置作为接口(interface)传递的任何结构的变量{}

我想知道如何在使用interface{}值时使用反射设置变量,并且所有类型的结构都可以传递给funcF(ointerface{})。如何将第一个值(s.A)更改为'hello'?packagemainimport("fmt""reflect")typeTstruct{Astring}funcmain(){F(T{"foo"})}funcF(ointerface{}){t:=reflect.ValueOf(&T{"bar"}).Elem()s:=reflect.ValueOf(&o).Elem()//okfmt.Println("struct:",t.Field(0).CanSet())

reflection - 使用(相对)未知/任意方法扩展结构,进行反射(或避免反射)

下面显然不起作用:Arbitrary:=struct{field1stringfield2string}{"a","b"}fmap:=make(map[string]func(string)string)fmap["fone"]=func(sstring)string{fmt.Printf("functionfone:%s",s)}fmap["ftwo"]=func(sstring)string{fmt.Printf("functionftwo:%s",s)}//probablyok,assimpleexamplesgo,tothispointwherereflectionneedst