草庐IT

go - 在 golang 中,如何将 interface{} 类型断言为 reflect.Type 指定的类型?

例如,我有一个名为a的interface{},还有一个名为elemTypereflect.Type/。现在,我想给elemType键入asserta,但是a.(elemType)无法编译成功。如何解决?对不起我的困惑表达。我的意思是我从一个函数中得到一个类型,我想为这个类型断言一个接口(interface){},但是这个类型存储在一个reflect.Type变量中。我想做的类似于下面的代码:varainterface{}//dosomethingfuncgetType()reflect.Type{varretreflect.Type//dosomethingreturnret}targ

go - 如何列出指向golang struct所有字段的指针?

在golang中有没有一个很好的方法来传递一些结构实例c的所有字段?我正在寻找一些语法糖功能,而不是这样做:method(&c.field1,&c.field2,&c.field3,&c.field4,&c.field5,...)我可以这样做:method(FieldsPointers(c)...)我是golang的新手,仍在学习基础知识,如果没有好的方法可以出于充分的理由做我想做的事情,我将不胜感激解释原因。 最佳答案 除了所有sql指定的工具,如果你想访问一个结构的指针,你可以使用reflect。请注意,这个包裹很棘手,robp

go - 指定 reflect.ValueOf 应该返回什么值

我有一个这样的结构:typeTimestruct{Timetime.TimeValidbool}现在,如果我在初始化为time.Now()和的Time结构上调用reflect.ValueOf()false,我将得到以下结果:{2018-06-0915:03:17.4320396false}有没有办法改变结构(添加方法?重命名字段?)以便reflect只返回time.Time值,而不返回bool一?有点像Valuer/Scanner接口(interface)对SQL查询所做的,但使用reflect。 最佳答案 不,这是不可能的。对不起

go - 用结构方法反射(reflect)结构

我正在玩弄反射,我正在尝试反射一个结构,创建一个新结构并尝试调用它。变量工作正常,但是当我反射一个新结构时,结构方法没有被复制?我在Playground上创建了一个简单的示例。在第34行,我收到0个方法存在,但应该有1个(SetName)。难道我做错了什么?几个小时以来就已经在谷歌上搜索了,但没有得到任何解决方案。https://play.golang.org/p/yArjVLtWEaG提前致谢欢呼拍拍 最佳答案 SetName不是company类型的方法,而是*company类型的方法。所以你必须创建一个指向公司的指针。

go - reflect.TypeOf 是 *string 并返回 0xc0001ae4a8 - 如何打印

这是我从GoAWS客户端检索结果的代码:fmt.Println("Success",reflect.TypeOf(result.Reservations[0].Instances[0].Architecture))Success*stringfmt.Println("Success",result.Reservations[0].Instances[0].Architecture)Success0xc0001ae4a8我不知道为什么会这样。 最佳答案 result.Reservations[0].Instances[0].Archi

go - 将 []interface{} 转换为非可变函数的参数

我正在寻找一种优雅的方式来解压缩Go中的参数列表。我不想为此目的使用可变参数函数,因为在我编写函数的用例中,我已经知道参数的数量,我想保持这部分简单。但是在我的用例中,参数作为[]interface{}到达。我找不到解决方案,但也许有人已经知道该怎么做?packagemainimport("fmt")//NON-VARIADICgreaterfuncgreet(n1,n2string){fmt.Printf("%s%s\n",n1,n2)}funcmain(){l:=[]interface{}{"hello","world"}//worksgreet(l[0].(string),l[1

oop - 反射(reflect)嵌入结构的类型

我目前正在按照我在网上找到的教程尝试一些OOP风格的Go。到目前为止,它非常吸引人(让我想起试图将OOP强制转换为ANSI-C)。然而,只有一件事困扰着我,我似乎无法解决。我如何才能反射(reflect)嵌入结构的类型名称?我在网上找到的所有信息都说不能反射(reflect)嵌入结构,因为嵌入结构无法直接访问它。这完全准确吗?如果是这样,解决以下问题(下面的代码)的正确方法是什么?基本上,该程序会打印出三种动物的名称,然后是括号中嵌入结构的类型名称,然后是相应动物的“声音”。对于名为“Rover”的狗,它将打印“Rover(动物):BARKBARK”。现在,显然,“Rover(动物)”

google-app-engine - 将 reflect.Value 传递给 Google App Engine 中的 datastore.GetMulti

我有一个围绕datastore.GetMulti的包装函数mypkg.GetStart.包装函数的参数必须与appengine.GetMulti相同。为了这个例子,我想获得dst的前两个实体。我的代码目前如下所示,但不起作用。datastore.GetMulti产生错误datastore:dsthasinvalidtype。typemyEntitystruct{ValInt}keys:=[]*datastore.Key{keyOne,keyTwo,keyThree}entities:=make([]myEntity,3)mypkg.GetStart(c,keys,enities)我的m

go - 从函数类型获取结构

我目前有以下代码func(r*Router)Get(pathstring,controllerinterface{}){...t:=reflect.TypeOf(controller)...}这叫做做以下事情Route.Get("/",controllers.Test.IsWorking)第二个参数基本就是这个typeTeststruct{*ControllerNamestring}func(tTest)IsWorking(){}typeControllerstruct{MethodstringRequest*http.RequestResponsehttp.ResponseWrite

pointers - 从 reflect.Value 中提取 uintptr

给定//IknowthatbehindSomeInterfacecanhideeitherintorapointertostruct//IntherealcodeIonlyhavev,notii:=something.(SomeInterface)v:=reflect.ValueOf(i)varpuintptrif"iisapointertostruct"{p=???}在这种情况下,我需要一些方法来区分指针和值。如果i是指向结构的指针,我需要将其转换为uintptr。到目前为止我发现了一些事情:(*reflect.Value).InterfaceData()的第二个成员将是指向该结构的