为什么我不能键入断言空接口?

时间:2017-09-01 19:21:03

标签: go tarantool

我想将空接口转换为map。为什么这不行?

// q tarantool.Queue (https://github.com/tarantool/go-tarantool)
statRaw, _ := q.Statistic() // interface{}; map[tasks:map[taken:0 buried:0 ...] calls:map[put:1 delay:0 ...]]
type stat map[string]map[string]uint
_, ok := statRaw.(stat)

2 个答案:

答案 0 :(得分:3)

您的函数返回map[string]map[string]uint,而不是stat。它们是go的类型系统中的不同类型。键入断言为map[string]map[string]uint,或者在Go 1.9中,您可以创建别名:

statRaw, _ := q.Statistic()
type stat = map[string]map[string]uint
_, ok := statRaw.(stat)

请参阅https://play.golang.org/p/Xf1TPjSI3_

答案 1 :(得分:0)

不要为这种事情使用类型别名。

首先进行类型检查,然后进行转换:

statRaw, _ := q.Statistic()

raw, ok := statRaw.(map[string]map[string]uint)
if !ok {
    return
}

type stat map[string]map[string]uint

my := stat(raw)

请参阅:https://play.golang.org/p/_BpPqfHYgch