标签: go-templates

使用范围从模板构建时,Go无法评估字段

我在Go程序中有Files一些File结构来保存文件的名称和大小.我创建了模板,见下文:

type File struct {
    FileName string
    FileSize int64
}
var Files []File
const tmpl = `
    {{range .Files}}
    file {{.}}
    {{end}}
    `
t := template.Must(template.New("html").Parse(tmplhtml))
    err = t.Execute(os.Stdout, Files)
    if err != nil { panic(err) }
Run Code Online (Sandbox Code Playgroud)

我当然害怕说:

无法评估[] main.File类型中的字段文件

不确定如何range在模板中正确显示文件名和大小.

go go-templates

1
推荐指数
1
解决办法
3195
查看次数

在Go模板中加入范围块

我有一个这样的模板:

 "environment": [
   {{- range $k,$v := .env }}
     {
       "name": "{{ $k }}",
       "value": "{{ $v }}"
     },
   {{- end }}
   ]
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

     "environment": [
    {
      "name": "name",
      "value": "test"
    },
    {
      "name": "region",
      "value": "us-east-1"
    },
  ]
Run Code Online (Sandbox Code Playgroud)

我想将其渲染如下:

    "environment": [
    {
      "name": "name",
      "value": "bxbd"
    },
    {
      "name": "region",
      "value": "us-east-1"
    }
  ]
Run Code Online (Sandbox Code Playgroud)

我无法去掉最后一个逗号来生成有效的 json。或者是否可以以某种方式将完整的范围块发送到某些自定义连接函数?

json dictionary loops go go-templates

1
推荐指数
1
解决办法
2617
查看次数

如何在GoLand或PyCharm IDE中打开与html文件相同的.tmpl文件?

我正在使用GoLand IDE。当我打开一个HTML文件,我可以在文件内容看不同的颜色,但是当我打开.tmpl它在使用的文件Go-Template的文件,我不能检查它像一个HTML文件,但是当我改变它的后缀来.html代替.tmpl它发生。

那么,如何在GoLand IDE中打开.tmplGo-Template)与HTML文件相同的文件?

另外,我尝试使用PyCharm,但结果还是一样。

html jetbrains-ide pycharm go-templates goland

1
推荐指数
1
解决办法
84
查看次数

循环未引用的配置值

我正在尝试通过执行以下操作从值列表创建配置映射

{{- if index .Values "environmentVariables" }}
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ include "some-env.fullname" . }}
data:
{{- range $key, $value := .Values.environmentVariables }}
  {{ $key }}: {{ $value }}
{{- end }}
{{- end }}
Run Code Online (Sandbox Code Playgroud)

具有以下值

environmentVariables:
  SERVER_CONTEXT_PATH: /some/where/v2
  SERVER_PORT: 8080
Run Code Online (Sandbox Code Playgroud)

但这导致以下错误消息

Error: release my-chart-env-v2-some-env-test failed: ConfigMap in version "v1" cannot be handled as a ConfigMap: v1.ConfigMap: Data: ReadString: expects " or n, parsing 106 ...ER_PORT":8... at {"apiVersion":"v1","data":{"SERVER_CONTEXT_PATH":"/dokument-redskaber/my-chart-app/v2","SERVER_PORT":8080},"kind":"ConfigMap","metadata":{"labels":{"app.kubernetes.io/instance":"my-chart-env-v2-some-env-test","app.kubernetes.io/managed-by":"Tiller","app.kubernetes.io/name":"some-env","helm.sh/chart":"some-env-0.1.0"},"name":"my-chart-env-v2","namespace":"some-env-test"}}
Run Code Online (Sandbox Code Playgroud)

如果我做

  {{ $key }}: {{ $value | quote }} …
Run Code Online (Sandbox Code Playgroud)

yaml go-templates kubernetes kubernetes-helm

1
推荐指数
1
解决办法
387
查看次数

如何使用 html 模板解组结构?

我正在尝试将 JSON 解组到我的 Mail 结构,但 Go 在解析 html_tmpl 和 text_tmpl 字段时返回错误。我怎么解决这个问题?

HtmlTmpl 字段来自:

html, err := template.ParseFiles(pathToHTMLFile)
Run Code Online (Sandbox Code Playgroud)

这是您可以测试的基本示例

package main

import (
    "encoding/json"
    "fmt"
    "html/template"
    "time"
)

type Mail struct {
    Id       string            `json:"id"`
    Subject  string            `json:"subject"`
    From     string            `json:"from"`
    To       string            `json:"to"`
    Date     time.Time         `json:"date"`
    HtmlTmpl template.Template `json:"html_tmpl"`
    TextTmpl template.Template `json:"text_tmpl"`
    Context  map[string]string `json:"context"`
}

func main() {
  mail := &Mail{}
  s := `{"id":"","subject":"Test mail","from":"support@example.com","to":"user@gmail.com","date":"0001-01-01T00:00:00Z","html_tmpl":{"Tree":{"Name":"template.html","ParseName":"template.html","Root":{"NodeType":11,"Pos":0,"Nodes":[{"NodeType":0,"Pos":0,"Text":"PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9InJ1Ij4KPGhlYWQ+Cgk8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCIgY2hhcnNldD0iVVRGLTgiPgoJPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbD0xIj4KCTxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSI+Cgk8dGl0bGU+0J/RgNC+0LLQtdGA0LrQsCDRgdCy0Y/Qt9C4PC90aXRsZT4KPC9oZWFkPgo8Ym9keT4KCTxzcGFuPg=="},{"NodeType":1,"Pos":298,"Line":10,"Pipe":{"NodeType":14,"Pos":298,"Line":10,"IsAssign":false,"Decl":null,"Cmds":[{"NodeType":4,"Pos":298,"Args":[{"NodeType":8,"Pos":298,"Ident":["msg"]}]}]}},{"NodeType":0,"Pos":305,"Text":"PC9zcGFuPgo8L2JvZHk+CjwvaHRtbD4="}]}}},"text_tmpl":{"Tree":{"Name":"template.txt","ParseName":"template.txt","Root":{"NodeType":11,"Pos":0,"Nodes":[{"NodeType":1,"Pos":2,"Line":1,"Pipe":{"NodeType":14,"Pos":2,"Line":1,"IsAssign":false,"Decl":null,"Cmds":[{"NodeType":4,"Pos":2,"Args":[{"NodeType":8,"Pos":2,"Ident":["msg"]}]}]}}]}}},"context":{"msg":"Hi!"}}`
  err := json.Unmarshal([]byte(s), mail)

  fmt.Println(err)
  fmt.Println(mail)
}
Run Code Online (Sandbox Code Playgroud)

json struct go unmarshalling go-templates

1
推荐指数
1
解决办法
655
查看次数

如何将计数器添加到头盔范围

这是我的 value.yaml 文件:

options:
  collection: "myCollection"
  ttl: 100800
  autoReconnect: true
  reconnectTries: 3
  reconnectInterval: 5
Run Code Online (Sandbox Code Playgroud)

现在我尝试在 configMap 中将其转换为 JSON,如下所示:

options: {
  {{- range $key, $val := .Values.options }}
  {{ $key }}: {{ $val | quote }},
  {{- end }}
}
Run Code Online (Sandbox Code Playgroud)

但我需要消除 JSON 中的最后一个逗号,所以我尝试添加一个计数器:

options: {
  {{ $c := 0 | int }}
  {{- range $key, $val := .Values.options }}
  {{ if ne $c 0 }},{{ end }}
  {{- $key }}: {{ $val | quote }}
  {{ $c := $c add 1 …
Run Code Online (Sandbox Code Playgroud)

go-templates kubernetes kubernetes-helm

1
推荐指数
1
解决办法
7384
查看次数

确保 Go 模板中的路径始终以斜杠结尾

我正在为一堆部署编写 Helm 图表。我提供的值可以是:

my_value: "/opt/my-path"或者my_value: "/opt/my-path/"

现在我想确保/路径的尽头总是有一个。

我如何使用Go模板来做到这一点?

go-templates kubernetes-helm sprig-template-functions

1
推荐指数
1
解决办法
1064
查看次数

go 模板和制表符

我想使用 go 模板语法在字符串中插入制表符。

基本上这是我的尝试:

{{ .title }}\t{{ .description }}
Run Code Online (Sandbox Code Playgroud)

现在打印的是“\t”而不是实际的选项卡

感谢您的帮助 !

go go-templates grafana

1
推荐指数
1
解决办法
2326
查看次数

Jetbrains Goland HTML 模板格式设置和代码完成

我在 Jetbrains Goland 中使用 Go HTML 模板。如何获得所有 3 个内容:HTML 格式设置、模板代码完成以及模板的模板格式设置?

假设我安装了 Go Templates 插件并且使用“*.tpl”作为模板的文件扩展名,我有两个选择:

  1. 设置 - 编辑器 - 文件类型 - HTML - 添加“*.tpl”作为 HTML 类型。优点:我有 HTML 代码完成和语法突出显示,但有一个警告(请参阅缺点 2) 缺点 1:我在模板项上没有代码完成,编辑器根本不知道模板 缺点 2:模板代码块被视为文本,即我没有 RANGE 块的代码缩进,例如当我尝试格式化代码时。

  2. 设置 - 编辑器 - 文件类型 - Go 模板 - 添加“*.tpl”作为注册类型,使用“HTML”作为基础类型(“模板数据语言”) 优点:我有“点”的代码完成功能,并且可以查看属性和方法它们(请参阅https://www.jetbrains.com/help/go/integration-with-go-templates.html) 缺点:没有 HTML 突出显示、自动完成或格式设置...

go go-templates goland

1
推荐指数
1
解决办法
1916
查看次数

Golang模板中将字节数组转换为字符串

在 Go 模板中,如何将字节数组转换为字符串?当我打印它时,我正在访问的上下文值如下所示: [34 102 111 111 34]

这对应于"foo".

当我打印值的类型(通过执行printf "%T" .MyValue)时,我看到json.RawMessage,这是一个[]byte.

go go-templates

1
推荐指数
1
解决办法
3086
查看次数