我正在尝试从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。
从规格:
如果来自v。(T)的T不是接口类型,那么这种断言检查v的动态类型是否与T相同
当您键入断言时,v的动态类型必须与T相同,根据您的错误消息,动态类型为int
,并且您尝试将其断言为uint32
,因为它们不相同而无效。
你可能想做这样的事情:
uint32Val = uint32(sampleYaml.Foo.(int))
你首先使用类型断言来从你的int
获得interface{}
然后你使用类型强制来让你的uint32