gpt4 book ai didi

go - 为什么即使实际值在 uint32 范围内,将 interface{} 转换为 uint32 也不起作用

转载 作者:数据小太阳 更新时间:2023-10-29 03:47:17 27 4
gpt4 key购买 nike

我正在尝试从 YAML 字符串中检索一个值并将其存储为 uint32 使用 gopkg.in/yaml.v2 .

当我尝试按如下方式转换值 foo 时,我收到一条错误消息:panic: interface conversion: interface {} is int, not uint32。我无法理解为什么会看到错误消息,因为值 foo 实际上是 3 并且它在 uint32 范围内。

var myYaml = `
foo: 3
`

type SampleYaml struct {
Foo interface{}
}

func main() {
var sampleYaml SampleYaml
var uint32Val uint32

yaml.Unmarshal([]byte(myYaml), &sampleYaml)

uint32Val = sampleYaml.Foo.(uint32)
fmt.Println(uint32Val)
}

这是 actual code我正在努力解决这个问题。

最佳答案

来自规范:

If T from v.(T) is not an interface type then such assertion checks if dynamic type of v is identical to T

当您进行类型断言时,v 的动态类型必须与 T 相同,根据您的错误消息,动态类型为 int并且您正在尝试将其断言为 uint32这是行不通的,因为它们不相同。

你可能想做这样的事情:

uint32Val = uint32(sampleYaml.Foo.(int))

您首先使用类型断言来获得 int来自你的 interface{}然后你使用类型强制让你的 uint32

关于go - 为什么即使实际值在 uint32 范围内,将 interface{} 转换为 uint32 也不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49033730/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com