问题标签 [go-reflect]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
go - 从 Golang 中的函数列表中选择一个函数
基本上,如果我有一个任意函数的切片或数组,我怎样才能只选择返回 int 的那些,或者只选择那些带 int 的?
我想我需要使用反射包,但是仅仅阅读文档并不能真正帮助我弄清楚如何去做。
go - 类型转换接口切片
我很好奇为什么 Go 不会隐式转换为何[]T
时[]interface{}
隐式转换T
为interface{}
. 我错过了这种转换是否有一些重要的东西?
例子:
go build
抱怨
不能在函数参数中使用 (type []string) 作为类型 []interface {}
如果我尝试明确地这样做,同样的事情:b := []interface{}(a)
抱怨
无法将 (type []string) 转换为 type []interface {}
所以每次我需要进行这种转换(这似乎经常出现)时,我一直在做这样的事情:
有没有更好的方法来做到这一点,或者标准库函数来帮助这些转换?每次我想调用一个可以获取整数或字符串列表的函数时,多写 4 行代码似乎有点愚蠢。
go - 存储切片的接口{}上的范围
鉴于您有一个接受t interface{}
. 如果确定t
是一个切片,我如何range
覆盖该切片?
go - 无论接收者类型如何,都在 interface{} 上动态调用方法
我正在开发一个用 Go 编写的模板系统,这意味着它需要自由使用该reflect
包。在这种特定情况下,我需要能够动态调用interface{}
. 奇怪的是,只要我的数据是已知类型,我的反射逻辑就可以正常工作,但如果数据是 type 则不行interface{}
。
下面的例子你可以看到main()
和中的逻辑Pass()
是相同的。唯一的区别是数据是已知类型还是内部已知类型interface{}
去玩:http ://play.golang.org/p/FTP3wgc0sZ
执行此代码后,我们得到以下结果
这意味着我动态调用方法的方法可以正常工作,除非我的对象当前位于interface{}
.
相反,如果我不使用指针接收器并通过,i
那么它会按预期工作。
去玩:http ://play.golang.org/p/myM0UXVYzX
这让我相信我的问题是&i
当 i() 是一个interface{}
. 我已经搜索了反射包并测试了诸如reflect.Value.Addr()
和之类的东西,reflect.PtrTo()
但是我无法按照我需要的方式工作。我的预感是它与 aninterface{}
定义为引用对象这一事实有关。
go - 检查两个切片的相等性
如何检查两个切片是否相等?
go - 遍历 Go 中结构的字段
基本上,迭代 a 的字段值的唯一方法(据我所知)struct
是这样的:
我想知道,是否有更好、更通用的实现方式[]interface{}{ r.a_number, r.a_string, }
,所以我不需要单独列出每个参数,或者是否有更好的方法来循环遍历结构?
我试图翻阅reflect
包裹,但我碰壁了,因为我不知道一旦我取回了该做什么reflect.ValueOf(*r).Field(0)
。
谢谢!
go - 按名称访问结构属性
这是一个不工作的简单 go 程序:
错误:
prog.go:18:无效操作:v[property](*Vertex 类型的索引)
我想要的是使用其名称访问 Vertex X 属性。如果我这样做v.X
,它会起作用,但v["X"]
不会。
有人可以告诉我如何进行这项工作吗?
go - 如何在 Go 中查找对象的类型?
如何在 Go 中找到对象的类型?在 Python 中,我只是typeof
用来获取对象的类型。同样在 Go 中,有没有办法实现相同的?
这是我从中迭代的容器:
在这种情况下,我无法获取对象行的类型,即字符串数组。
function - 如何正确使用反射包中的.Call
我的代码遇到了最后一个问题,它涉及反射包中的 .Call 函数。
所以我正在打这样的电话:
我进行 .Call 的方法如下:
我不太明白的是如何操作“in”变量以便正确地将我需要的映射传递给函数。我看到make()中的第二个参数是参数的长度?但我不太明白如何格式化变量以正确传递我的参数。我递归地遇到错误消息:
任何帮助将非常感激!