草庐IT

reflect.ValueOf

全部标签

go - reflect.MakeFunc 如何使用可变参数函数

以下是反射中MakeFuncExample的摘录文档。我明白它是如何工作的,如图所示。//Makeandcallaswapfunctionforints.varintSwapfunc(int,int)(int,int)makeSwap(&intSwap)fmt.Println(intSwap(0,1))我不明白的是,它到底怎么可以与可变输入。varintswapfunc(...int)(...int)//Gottobewrongvarintswapfunc(...int)(int,int)//Willnotworkevenwith2inputs有人可以举一个使用可变输入的MakeFun

unit-testing - 如何用reflect测试方法?

我有一个Sync()方法可以覆盖在环境中设置的Config字段值。环境变量名称是通过下划线和大写名称从配置字段派生的。例如。AppName会有一个对应的环境变量APP_NAME请帮我测试以下情况。有复杂的东西,比如https://golang.org/pkg/reflect/#Value.Set:Setassignsxtothevaluev.ItpanicsifCanSetreturnsfalse.AsinGo,x'svaluemustbeassignabletov'stype.所以我不知道如何测试这个案例?import("encoding/json""errors""fmt""os"

go - 在 reflect.MakeFunc 中返回错误值

我正在尝试在golang中创建一个返回类型为(SomeStruct,error)(标准错误接口(interface))的函数fn:=func(args[]reflect.Value)[]reflect.Value{database:=mongoConnectorInstance.GetDatabase()deferdatabase.Session.Close()selector:=bson.M{field:args[0].Interface(),}newValue:=reflect.New(fieldFunctionValue.Type().Out(0))newValueInterfa

go - 如何在 reflect.New 创建时按其类型转换 reflect.Value

我实际上是在尝试在golang中使用反射的黑魔法:P我得到了这样的东西:var_intintvar_int32int32var_int64int64var_stringstringvarnilablesIndexmap[int]reflect.Valuevarnilables=map[string]reflect.Type{"int32":reflect.TypeOf(_int32)},"int64":reflect.TypeOf(_int64)},"int":reflect.TypeOf(_int)},"string":reflect.TypeOf(_string)},}nilabl

go - 是否可以通过Golang中的枚举类型反射(reflect)出枚举的变量

例如,我有一个像这样的枚举:typeStatusintconst(NormalStatus=itoaBlocked)Status的类型已知,我可以通过Status获取"Normal"和"Blocked"。如果有一种方法,我想就是通过reflect。我不想用映射来解决它。因为这个函数是在一个库中使用的。它是一种无状态的。还有其他方法吗?谢谢 最佳答案 常量名称不会在reflectAPI中公开。使用stringer工具。 关于go-是否可以通过Golang中的枚举类型反射(reflect)出

go - 从 reflect.Type 中删除指针

我有一个reflect.Type,它包含一个指向结构的双指针。我希望能够删除一个间接级别以获得指向该结构的指针。这可能吗?例如,我想这样做:funcfoo(xinterface{}){typ:=reflect.TypeOf(x)fmt.Printf("%v",typ)//prints**FoorealType:=typ.PointsTo()fmt.Printf("%v",typ)//prints*Foo}但据我所知,这个功能并不存在。有一个Indirect函数在Value上运行,但我看不到任何类似的适用于Type的函数。 最佳答案

go - 在go中,为什么打印出来的reflected value和它的interface一样?

摘自LawsofReflection:(Whynotfmt.Println(v)?Becausevisareflect.Value;wewanttheconcretevalueitholds.)这让我很困惑,因为下面的代码:varxfloat64=3.4varv=reflect.ValueOf(x)fmt.Println("valueofxis:",v)y:=v.Interface().(float64)//ywillhavetypefloat64.fmt.Println("interfaceofvalueofxis:",y)打印相同的输出:valueofxis:3.4interfac

pointers - reflect.Pointer() 返回值不是值地址

typeBookInfostruct{Meta*TableMeta...}func(si*schemaInfo)getTabInfo(objinterface{})(*tabInfo,error){typ:=reflect.TypeOf(obj)val:=reflect.ValueOf(obj)iftyp.Kind()!=reflect.Ptr{returnnil,errors.New("nborm.schemaInfo.getDBInfo()error:requiredapointer")}meta:=*(**TableMeta)(unsafe.Pointer(val.Pointer

reflection - 在 go 反射包中,调用 Value.Kind() 是 Value.Type().Kind() 的语法糖吗?

两个reflect.Type接口(interface)和reflect.Valuetype实现相同的Kind()方法签名,假设我们有一些值对象v:=reflect.ValueOf(x)v.Kind()只是调用v.Type().Kind()吗? 最佳答案 它们包含相同的值,但似乎指的不是同一件事:type.go来源value.go来源Type通常由未导出的结构rtype实现(通过TypeOf),而Value包含一个*rtype并扩展flag,它本身是Kind的简化形式://flagholdsmetadataaboutthevalue.

go - 使用 reflect 设置 struct of struct values 的值

我有一些看起来可以工作但最终什么也没做的代码:http://play.golang.org/p/TfAWWy4-R8有一个结构,该结构具有结构类型的字段。内部结构具有所有字符串字段。在循环中使用反射,想要从外部结构中获取所有结构字段。接下来,填充内部结构中的所有字符串值。示例代码从标签中获取文本并在“,”上对其进行解析,以获取内部循环的字符串值。这是应该创建内部结构并将解析的数据添加到字符串值的主要部分。t:=reflect.TypeOf(Alias{})alias=reflect.New(t)fori:=0;i当您查看示例的输出时,它看起来像是在工作,但是在从外部结构打印一个值之后,