我尝试从YAML字符串中检索值,并使用gopkg.in/yaml.v2将其存储为uint32
。
当我尝试按如下方式转换值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。
答案 0 :(得分:0)
来自规范:
如果来自v。(T)的T不是接口类型,则此类断言检查v的动态类型是否与T
相同
当您键入断言时,v的动态类型必须与T相同,根据您的错误消息,动态类型为int
并且您尝试将其断言为uint32
因为它们不相同而不会起作用。
你可能想做这样的事情:
uint32Val = uint32(sampleYaml.Foo.(int))
首先使用类型断言从int
获取interface{}
,然后使用类型强制来获取uint32