对于如何定义map [string] struct感到困惑

时间:2018-12-28 03:55:32

标签: go

我了解go中的地图,但是此代码段使我感到困惑:

testCases := map[string]struct {
        pod      *api.Pod
        required []corev1.ResourceName
        err      string
    }{
        "init container resource missing": {
            pod: &api.Pod{
                Spec: api.PodSpec{
                    InitContainers: []api.Container{{
                        Resources: api.ResourceRequirements{
                            Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("1m")},
                            Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("2m")},
                        },
                    }},
                },
            },
            required: []corev1.ResourceName{corev1.ResourceMemory},
            err:      `must specify memory`,
        },
        "container resource missing": {
            pod: &api.Pod{
                Spec: api.PodSpec{
                    Containers: []api.Container{{
                        Resources: api.ResourceRequirements{
                            Requests: api.ResourceList{api.ResourceCPU: resource.MustParse("1m")},
                            Limits:   api.ResourceList{api.ResourceCPU: resource.MustParse("2m")},
                        },
                    }},
                },
            },
            required: []corev1.ResourceName{corev1.ResourceMemory},
            err:      `must specify memory`,
        },
    }

我理解这一点:

testCases := map[string]struct

但是接下来的事情对我来说毫无意义。代码如何自行定义api.Pod,corev1.ResourceName等? 那不是结构定义的字符串吗?

2 个答案:

答案 0 :(得分:4)

testCases是具有字符串类型和值的映射:

struct {
    pod      *api.Pod
    required []corev1.ResourceName
    err      string
}

pod是指向类型api.Pod(也是一个结构体)的指针,required是一个切片,其元素类型为corev1.ResourceName,而{{1 }}是一个字符串。

因此err映射将包含许多字符串,这些字符串指向具有上述结构的结构。

答案 1 :(得分:4)

随后出现的是某种“匿名”结构。

相当于:

testCases := map[string]StructName

如果您指定的结构如下:

type StructName struct {
    pod      *api.Pod
    required []corev1.ResourceName
    err      string
}