问题标签 [type-assertion]

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 投票
2 回答
2120 浏览

go - 使用 Golang 中的类型断言检测值超出范围错误

给定以下代码:

如何检测到函数因超出 int64 范围而失败?strconv.ParseInt函数返回一个错误类型,但在这种情况下,它实际上是一个strconv.NumError类型,如 所示%#v错误处理和 Go文章提到您可以使用类型断言来检查特定类型的错误,但它没有给出任何示例。我应该使用什么表达式来完成此代码:

0 投票
1 回答
310 浏览

go - 使用两种不同(但相同)的类型时,类型断言失败

我有这个代码

但是,我收到此错误:

但是,在这种情况下,int 与 MyType 相同。有没有办法在不使用相同类型的情况下做到这一点?

0 投票
1 回答
402 浏览

json - 有没有更简洁的方式在golang中使用未知结构的json对象?

当我有一个可靠的返回一些简单 json 的 rest api 端点时,我可以使用一个结构来准确定义预期 json 结果的结构,但是我必须使用某些端点返回非常大和复杂的 json 结果数据,并且这些结果的结构并不总是已知的。

我一直在使用它来解组:

并且以同样的方式我有GetInt, GetBool, GetSlice, GetJsonObj,

但正如您所见,除了类型断言参数之外,所有这些函数的内容实际上都是相同的。有没有办法传入类型断言参数以有效地将所有这些函数简化为单个函数?

0 投票
2 回答
1764 浏览

go - goLang 将结构传递给函数(args interface{})

这是我的代码 http://play.golang.org/p/h0N4t2ZAKQ

当我运行它时,z.Message 不打印你好,不知道为什么。有人可以澄清吗?提前致谢

0 投票
1 回答
66 浏览

go - 范围超过 []interfaces{} 并获取每种类型的通道字段

我会尽量让它尽可能清楚,首先在我的脑海中。

我有一个接口和几个通过声明方法继承它的类型。非常漂亮和聪明的继承方式。

然后我有一个“超级”类型Thing,所有其他类型都嵌入了它。

Thing结构具有 Size int 和 Out chan 属性

我想了解的是为什么我可以从两个子结构中获取 size 的值,但是我在通道字段(*ndr 我用来在 goroutines 和它们的调用者之间进行通信).GetSize()没有同样的成功.GetChannel())

……我明白了t.GetChannel undefined (type Measurable has no field or method GetChannel)

它可能有助于逻辑演示:

注释代码是我正在尝试学习的另一件事。我可以通过使用在超类型上声明的方法来获取值,但不能通过直接从子类型访问。当然,我可以解决类型,t.(*bothTheThingTypes).Size但我失去了活力,我没有完全理解这个......

0 投票
3 回答
133 浏览

go - interface{} 变量到 []interface{}

我有一个interface{}变量,我知道它是一个指向切片的指针:

但我发现很难将其转换为[]interface{}变量:

这行不通。知道如何解决这个问题吗?

0 投票
2 回答
2030 浏览

go - 为什么 map 和 type 断言可以返回 1 或 2 个值?

要定义地图,我们可以这样做:

value, present := m["key"]

或者:

value := m["key"]

通过类型断言,我们可以做到:

但我找不到一种方法来定义一个可以返回 1 个值或 2 个值的函数。

例如:

当我调用这个函数时,我得到:

PS:我知道类似的东西是如何template.Must工作的,但它似乎有所不同。我真的很想知道 Map 和类型断言是如何发挥作用的,所以我可以将它应用到函数中。

提前致谢。(我清楚吗?我的英语很差对不起)。

0 投票
1 回答
3210 浏览

pointers - 指向空接口类型断言的指针

我收到一个指向我的函数接口的指针,我正在尝试迭代它。底层类型是一个字符串切片,如果我使用类型interface{}而不是指向它的指针,我可以将其转换为它*interface{}什么是键入指向接口的断言指针的最佳方法?使用指针,因为要转换的值很大。

不起作用的代码:

invalid type assertion: member.([]string) (non-interface type *interface {} on left)

不适用于解除引用指针的代码:

invalid type assertion: member.([]string) (non-interface type *interface {} on left)

如果我更改父函数以发送接口而不是其指针,则代码有效:

或者我应该将它输入到字符串切片并使用指向它的指针?

0 投票
2 回答
12813 浏览

go - 如何在 golang 中记录类型断言错误?

我有一组要映射的数据[]string。我可以通过两种方式做到这一点:

一种)

在这种情况下,执行将在控制台上列出错误后停止。

b)

在这种情况下,不会发生错误,但 s 将具有其零值


我想在不停止执行的情况下记录此类断言失败案例中的错误。但是,当我使用类型 (b) 时,我看不到错误详细信息。

我能想到的唯一解决方案是使用reflect.TypeOf和打印这两种类型。

使用解决方案(b)时,我们还有其他方法可以得到错误吗?

0 投票
1 回答
245 浏览

typescript - 为什么打字稿中有两种不同的铸造语法?

据我所知,Typescript 中有两种类型的语法可以转换。

  1. 只需使用<>投射

    /li>
  2. 使用as语句进行强制转换

    /li>

我猜生成的代码 1 或 2 是完全一样的。as而且,当我开始使用 Typescript 时,并没有这样的语法来使用语句。我猜as是打字稿中的新语法。

但是,应该有一些理由来制定新的语法。为什么他们需要这些语法?如果只有 1 种强制转换语法,会不会有什么不方便的地方?