【发布时间】:2014-10-06 18:26:55
【问题描述】:
我正在尝试编写一个函数,该函数既可以接受某种任意类型的内容,也可以接受可以生成和返回任意类型的函数。为此,我必须能够通常测试参数是否是函数,而无需测试它是否是返回类型 X 的函数。我该怎么做?可能如下所示:
func Blah(arbitrary interface{}) {
var value interface{}
if function, ok := arbitrary.(func interface{}); ok {
value = function()
} else {
value = arbitrary
}
...
}
这会失败。也许类型断言不是在这里使用的东西。或者也许我只是不知道语法。将不胜感激任何建议。我目前唯一知道要做的就是把它分成两个函数,一个接受要按原样存储的数据,另一个期望得到一个函数,但是当这两种情况下的目标只是得到一个值并将其传递给函数的其余部分。
对此有何想法?
【问题讨论】:
-
类型断言似乎不可能(静态与运行时类型检查:stackoverflow.com/a/21496374/6309)。这让你有了反思。
标签: callback go type-safety type-assertion