Смущен тем, как определяется структура map [string] - PullRequest
0 голосов
/ 28 декабря 2018

Я понимаю карты в го, но этот фрагмент кода смущает меня:

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 голосов
/ 28 декабря 2018

После чего следует «анонимная» структура.

Это будет эквивалентно:

testCases := map[string]StructName

Если вы указали такую ​​структуру как:

type StructName struct {
    pod      *api.Pod
    required []corev1.ResourceName
    err      string
}
0 голосов
/ 28 декабря 2018

testCases - это карта с ключами типа string и значениями типа:

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

pod - это указатель на значение типа api.Pod (также структура), required является срезом с элементами типа corev1.ResourceName, а err является строкой.

Таким образом, карта testCases будет содержать много строк, которые указывают на структуры с вышеуказанной структурой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...