我了解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等? 那不是结构定义的字符串吗?
答案 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
}