【问题标题】:How to Add a field to struct golang using JEN package where fields depend on JSON如何使用 JEN 包将字段添加到 struct golang,其中字段依赖于 JSON
【发布时间】:2022-09-28 11:52:47
【问题描述】:

循环遍历 Json 并获取带有标签的 \"name\" 字段,然后将其添加到结构块中。 代码生成后所需的输出

var queryOutput [][]struct {
        product_name string `db:\"product_name\" json:\"product_name\"`
        category     string `db:\"category\" json:\"category\"`
        category2    string `db:\"category2\" json:\"category2\"`
    }
for _, yaxis := range YAxisColumn {
        columns := yaxis.(map[string]interface{})
        columnName := columns[\"name\"].(string)
        c:= jen.Id(utils.GetFormattedName(columnName)).Int().Tag(map[string]string{
            \"json\": GetFormattedName(columnName),
            \"db\":   GetFormattedName(columnName),
        }),
    }

在其中添加 Yaxis 列字段的结构,即名称

return jen.Func().Id(serviceName).Params().Parens(
        jen.List(jen.Interface(), jen.Error()),
    ).Block(
        jen.Var().Id(\"queryOutput\").Op(\"[][]\").Struct(
            jen.Id(utils.GetFormattedName(XAxisColumn)).String().Tag(map[string]string{
                \"json\": utils.GetFormattedName(XAxisColumn),
                \"db\":   utils.GetFormattedName(XAxisColumn),
            }),
),

JSON

\"yAxisColumn\" : [
                            {
                                \"name\": \"category\",
                                \"color\": \"\"
                            },
                            {
                                \"name\": \"category2\",
                                 \"color\":\"\"
                            }
],

    标签: go code-generation codegen


    【解决方案1】:

    在 jen 包中使用名为 StructFunc 的函数。

    使用后输出

    jen.Var().Id("queryOutput").Op("[]").StructFunc(
                func(g *jen.Group) {
                    g.Add(jen.Id(utils.GetCamelCaseName(XAxisColumn)).String().Tag(map[string]string{
                        "json": utils.GetFormattedName(XAxisColumn),
                        "db":   utils.GetFormattedName(XAxisColumn),
                    }))
                    for _, yaxis := range YAxisColumn {
                        columns := yaxis.(map[string]interface{})
                        columnName := columns["name"].(string)
                        c := jen.Id(utils.GetCamelCaseName(columnName)).Int().Tag(map[string]string{
                            "json": utils.GetFormattedName(columnName),
                            "db":   utils.GetFormattedName(columnName),
                        })
                        g.Add(c)
                    }
                },
            ),
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-14
      • 2014-12-01
      • 2019-05-09
      • 2016-06-18
      • 2012-04-14
      • 1970-01-01
      • 2020-08-15
      • 2019-08-22
      相关资源
      最近更新 更多