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

问题描述 投票:-5回答:1

我正在尝试从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

go yaml
1个回答
0
投票

从规格:

如果来自v。(T)的T不是接口类型,那么这种断言检查v的动态类型是否与T相同

当您键入断言时,v的动态类型必须与T相同,根据您的错误消息,动态类型为int,并且您尝试将其断言为uint32,因为它们不相同而无效。

你可能想做这样的事情:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.