Поддерживает ли Go декларации вложенных типов или буквальные присваивания анонимным структурам? - PullRequest
0 голосов
/ 29 октября 2018

Я новичок в Go и у меня есть два вопроса о типах.

Например, возьмите этот код:

type Rule struct {
    handler func() (err error)
    creator string
    args struct {
        extension string
        action string
        folder struct {
            location string
            storage string
        }
    }
}

1) Как я могу создать новое Rule, используя одинарное буквальное объявление, и присвоить значения свойствам args? Что не так с этим кодом:

rule := Rule{
    args: {
        extension: "png,jpg,gif,svg",
        action: "move",
    },
}

2) Можно ли определять типы внутри типов? Например, не разбивая код на два отдельных объявления типов, могу ли я изменить часть args типа Rule, чтобы она определяла второй тип с именем RuleArgs?

Я знаю, что я могу разбить их на несколько присваиваний и объявлений, но мой вопрос заключается в том, должен ли я (т. Е. Делает ли Go невозможным это)?

1 Ответ

0 голосов
/ 29 октября 2018

Вложенные структуры - вещь в ходу, но они могут вызвать некоторую беспорядок. Чтобы создать экземпляр данного объекта, попробуйте это:

type Rule struct {
    handler func() (err error)
    creator string
    args struct {
        extension string
        action string
    }
}

rule := Rule{
    args: struct {
        extension string
        action    string
    }{
        extension: "png,jpg,gif,svg",
        action:    "move",
    },
}

Обратите внимание, что у меня есть имена и типы аргументов структуры. Также обратите внимание, что я убрал аргумент folder для краткости.

Если вы хотите сделать это в несколько строк:

rule2 := Rule{}
rule2.args.action = "some-action"
...