go 字符串模板无法正确插入变量,我似乎不明白为什么

问题描述 投票:0回答:1
WHERE
  1=1
  {{- if .Params.FromDate }}
    AND datestr >= '{{ ConvertDate .Params.FromDate }}'
  {{- else }}
    AND datestr >= '{{.CurrentDate }}'
  {{- end }}

所以这是我的查询模板的片段,

const template = '...'
。 我正在将变量从单独的 go 文件插入到 .Params.FromDate 和 .CurrentDate 中。

但是,当我执行应该打印此模板并插入这些数据的函数时,当我不包含 .Params.FromDate 变量时,它只会显示为 else 语句的空字符串

''
,并且我不知道为什么。

当语句为真并且提供了 .Params.FromDate 时,数据将被正确打印。当我将 .CurrentDate 放入真实逻辑中时,它会很好地打印出来,但是当逻辑为 false 时,会提供一个空字符串,而不是我传入的 .CurrentDate 。

我检查了一下,.CurrentDate 已初始化并传入,但它只是不打印,我不明白为什么。

templateData := map[string]interface{}{
        "Params":      params,
        "CurrentDate": currentDate,
    }
    err = tmpl.Execute(&queryBuilder, templateData)
    fmt.Println(queryBuilder.String())

上面是我在另一个 go 文件中调用它的方式。 tmpl 是第一个代码块中的字符串模板。

sql go goland
1个回答
0
投票

我认为它与this

有关

已知选项:

missingkey:如果映射使用映射中不存在的键进行索引,则控制执行期间的行为。

“missingkey=默认”或“missingkey=无效” 默认行为:不执行任何操作并继续执行。 如果打印的话,索引操作的结果就是字符串 “”。

“缺失密钥=零” 该操作返回地图类型元素的零值。

“缺少密钥=错误” 执行立即停止并出现错误。

听起来您想使用该选项

"missingkey=zero"

tmpl.Option("missingkey=zero").Execute(&queryBuilder, templateData)

或者,你也可以这样做

{{- 如果索引 .Params "FromDate" }}

默认情况下应该使用“缺失的键为零值”

© www.soinside.com 2019 - 2024. All rights reserved.