Как добавить несколько строк переменного числа раз в функции? - PullRequest
0 голосов
/ 23 мая 2019

Я использую Дженнифер, которая является генератором кода для Go.Я хочу написать код для генерации функции main, чтобы некоторые строки могли быть count количество раз, где count - это переменная, которую я читал из файла.

Я попытался создать необходимую строкуиспользуя цикл for и передавая его в аргументах, но Block() принимает только тип Code.

functoret := jen.Func().Id("main").Params().Block(
jen.Id("a").Op(":=").Id("b")
jen.Id("a").Op(":=").Id("c")
jen.Id("a").Op(":=").Id("d") //count number of times
)

1 Ответ

1 голос
/ 23 мая 2019

Блок принимает фрагмент кода, поэтому сначала создайте фрагмент, а затем вызовите Блок:

code := []jen.Code{
    jen.Id("a").Op(":=").Id("b"),
    jen.Id("a").Op(":=").Id("c"),
}
for i := 0; i < count; i++ {
    code = append(code, jen.Id("a").Op(":=").Id("d"))
}

functoret := jen.Func().Id("main").Params().Block(code...)

Либо используйте методы BlockFunc и Group.Add. :

functoret := jen.Func().Id("main").Params().BlockFunc(func(g *jen.Group) {
    g.Add(jen.Id("a").Op(":=").Id("b"))
    g.Add(jen.Id("a").Op(":=").Id("c"))

    for i := 0; i < count; i++ {
        g.Add(jen.Id("a").Op(":=").Id("d"))
    }
})
...