如何在函数中添加一些可变次数的行?

时间:2019-05-23 09:11:31

标签: go code-generation go-jennifer

我正在使用Jennifer,它是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 个答案:

答案 0 :(得分:1)

Block接受一片代码片段,因此首先构建该片段,然后调用Block:

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...)

或者,使用BlockFuncGroup.Add methods

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"))
    }
})