我在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在模板中正确显示文件名和大小.
我有一个这样的模板:
"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。或者是否可以以某种方式将完整的范围块发送到某些自定义连接函数?
我正在使用GoLand IDE。当我打开一个HTML文件,我可以在文件内容看不同的颜色,但是当我打开.tmpl它在使用的文件Go-Template的文件,我不能检查它像一个HTML文件,但是当我改变它的后缀来.html代替.tmpl它发生。
那么,如何在GoLand IDE中打开.tmpl(Go-Template)与HTML文件相同的文件?
另外,我尝试使用PyCharm,但结果还是一样。
我正在尝试通过执行以下操作从值列表创建配置映射
{{- 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) 我正在尝试将 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) 这是我的 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) 我正在为一堆部署编写 Helm 图表。我提供的值可以是:
my_value: "/opt/my-path"或者my_value: "/opt/my-path/"
现在我想确保/路径的尽头总是有一个。
我如何使用Go模板来做到这一点?
我想使用 go 模板语法在字符串中插入制表符。
基本上这是我的尝试:
{{ .title }}\t{{ .description }}
Run Code Online (Sandbox Code Playgroud)
现在打印的是“\t”而不是实际的选项卡
感谢您的帮助 !
我在 Jetbrains Goland 中使用 Go HTML 模板。如何获得所有 3 个内容:HTML 格式设置、模板代码完成以及模板的模板格式设置?
假设我安装了 Go Templates 插件并且使用“*.tpl”作为模板的文件扩展名,我有两个选择:
设置 - 编辑器 - 文件类型 - HTML - 添加“*.tpl”作为 HTML 类型。优点:我有 HTML 代码完成和语法突出显示,但有一个警告(请参阅缺点 2) 缺点 1:我在模板项上没有代码完成,编辑器根本不知道模板 缺点 2:模板代码块被视为文本,即我没有 RANGE 块的代码缩进,例如当我尝试格式化代码时。
设置 - 编辑器 - 文件类型 - Go 模板 - 添加“*.tpl”作为注册类型,使用“HTML”作为基础类型(“模板数据语言”) 优点:我有“点”的代码完成功能,并且可以查看属性和方法它们(请参阅https://www.jetbrains.com/help/go/integration-with-go-templates.html) 缺点:没有 HTML 突出显示、自动完成或格式设置...
在 Go 模板中,如何将字节数组转换为字符串?当我打印它时,我正在访问的上下文值如下所示:
[34 102 111 111 34]
这对应于"foo".
当我打印值的类型(通过执行printf "%T" .MyValue)时,我看到json.RawMessage,这是一个[]byte.
go-templates ×10
go ×6
goland ×2
json ×2
kubernetes ×2
dictionary ×1
grafana ×1
html ×1
loops ×1
pycharm ×1
struct ×1
yaml ×1