问题标签 [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.

0 投票
7 回答
169164 浏览

go - 如何比较两个结构、切片或映射是否相等?

我想检查两个结构、切片和映射是否相等。

但是我遇到了以下代码的问题。请参阅我在相关行的评论。

http://play.golang.org/p/AZIzW2WunI

0 投票
2 回答
12540 浏览

go - 为什么 golang reflect.MakeSlice 返回不可寻址的值

检查下面的片段:

http://play.golang.org/p/xusdITxgT-

为什么会这样?因为我的一个论点必须是切片地址。

可能我没给大家说清楚。

上面的代码就是我需要切片地址的原因。

这里的结果变量就是我需要的。现在通常我可以做到这一点

但是现在 SomeStruct 是动态的,我需要使用 reflect.MakeSlice 创建切片,所以

它会出错:结果必须是切片地址。

0 投票
3 回答
11610 浏览

go - 如何检查对象是否具有特定方法?

在 Go 中,如何检查对象是否响应方法?

例如,在 Objective-C 中,这可以通过执行以下操作来实现:

0 投票
4 回答
3317 浏览

go - 如何知道Golang中任意类型的变量是否为零?

因为并非所有类型都具有可比性,例如切片。所以我们不能这样做

0 投票
1 回答
1227 浏览

go - How to I convert reflect.New's return value back to the original type

I'm using reflection in go and I noticed the oddity expressed below:

How can I convert the reflect.Value back to main.Foo?

I've provided a go playground for convenience.

0 投票
1 回答
6106 浏览

go - 如何在golang中反映结构递归

我想递归地反映结构类型和值,但它失败了。我不知道如何递归地传递子结构。

它错误如下。

我有两个结构PersonName

Person在 main 中定义,并用递归函数显示结构。

display函数递归显示结构。

0 投票
1 回答
2345 浏览

go - 使用反射识别非内置类型

我需要区分这样的类型

从一个[]byte。使用reflect,reflect.TypeOf(A{}).Kind告诉我它是一个Sliceof byte。如果没有要检查的类型的有界列表,我如何区分[]byte{}A{}

在较新版本的 Go 中是否有新的方法来做到这一点?

0 投票
1 回答
406 浏览

go - How to use an un exported object from third party package as return type in golang?

In my use case I am using influxdb. I am trying to create a global client to influxdb in Golang. But when I return the influxdb client from a function, the client object is not exported in the influxdb package. So I am not able to return this.

Here is my code:

getHTTPClient() function is trying to return the client object *client.client.
But the client object is not exported in influxdb golang package.
So how can I handle this problem?
Could anyone help me with this?

Thanks

0 投票
3 回答
2944 浏览

go - 在 Go 中,如何使用切片创建通用函数?

假设我想编写一个在切片中查找值的函数

我凭直觉想写:

但是我无法用 Go 做到这一点。我可以有一个接口

这会起作用,但在我的真实代码中,事情更复杂(我需要做 slices[from:end] 等)、追加、......等等,如果我在接口中重新定义所有这些,我最终会得到很多代码. 有没有更好的办法?

0 投票
1 回答
1410 浏览

go - 如何将 assert a reflect.Value 结构键入回我知道它实现的接口?

我最近一直在用 Go 编写一些审计流程。其中大部分只是将任意构造分开的反射。存在一个可用于对象相等的接口。并非所有被撕裂的东西都实现了这个接口,并且可以在任意类型之间进行比较(对象相等并不意味着类型相等)。

因为被比较的东西不需要是相同的类型,所以在某些情况下,一方面是指针,另一方面是值(*string vs string 或 *ChickenBox vs BoxOfChicken)。当我遇到指针/接口值时,我只是简单地取消引用它们,因此完成时的比较很简单。

我的问题是,一旦我取消了指针/接口的引用,我似乎无法对父指针/接口实现的接口键入断言。

这是一个示例(游乐场: https: //play.golang.org/p/O_dvyW07fu),它演示了这一点:

我对此的理解是,界面分为两部分(https://blog.golang.org/laws-of-reflection)。在 reflect 中,这由 reflect.Type(广义方法)和 reflect.Value(广义数据)表示。在演示中,我们成功评估了传递的 reflect.Value 的 reflect.Type 实现了第 67 行的接口:

这是因为在第 53 行,我们可以使用 reflect.PtrTo 重建我们与接口的关系:

正是这个过程(在 reflect.Type 方面)我无法在 reflect.Value 方面复制。所以在第 70 行,我们简单地拥有底层结构(没有方法):

这失败了,我一直找不到任何语法可以让我做在 reflect.Type 方面似乎可行的事情;回到针对满足断言接口的该结构定义的方法(我认为 reflect.Type 只是针对缓存的接口存储工作并且结构方法在这一点上已经丢失给我是合理的)。

我有一个可行的解决方案,它只是在做任何工作之前强制指针/接口的存在,但这感觉就像我错过了一些东西。鉴于 reflect.Value 的 reflect.Type 可以成功找到接口,在 reflect.Value 方面我可以做类似的事情吗?