游乐场链接:http://play.golang.org/p/Ebf5AuJlcP
type Foo interface {}
type Bar interface {
ThisIsABar()
}
// Person implements both Foo and Bar
type Person struct {
Name string
}
func (p Person) ThisIsABar() {}
type FooContext struct {
Something Foo
}
type BarContext struct {
Something Bar
}
func main() {
t := template.Must(template.New("test").Parse("{{ .Something.Name }}\n"))
// This works fine.
if err := t.Execute(os.Stdout, FooContext{Person{"Timmy"}}); err != nil {
fmt.Printf("Error: %s\n", err)
}
// With BarContext, containing the exact same Person …Run Code Online (Sandbox Code Playgroud) 我正在寻找使用Go模板循环数组,我想在循环中的最后一项添加一个额外的字符串.
在python中,我可以做到
{% for host in hosts %}
{{ host }}{% if loop.last %} ;{% endif %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
为了与Go实现相同的目标,下面是Go等效的片段.
{{ range $host := $hosts }}
{{$host}}
{{ end }}
Run Code Online (Sandbox Code Playgroud)
谢谢.
说我有html/template类似以下内容:
<html>
<body>
<p>{{SomeFunc .SomeData}}</p>
</body>
Run Code Online (Sandbox Code Playgroud)
有时会SomeFunc返回错误.有没有惯用的方法来解决这个问题?
如果我直接写入ResponseWriter,则在遇到错误之前已经写入了状态代码200.
var tmpl *template.Template
func Handler(w http.ResponseWriter, r *http.Request) {
err := tmpl.Execute(w, data)
// "<html><body><p>" has already been written...
// what to do with err?
}
Run Code Online (Sandbox Code Playgroud)
我最好返回一个状态代码400或其他一些,但如果我template.Execute直接使用,我就看不到这样做的方法ResponseWriter.有什么我想念的吗?
我想将两个数据对象传递给Go Template.一个是MongoDB查询结果,另一个是整数数组.
MongoDB查询: -
var results []User
sess, db := GetDatabase()
defer sess.Close()
c := db.C("user")
err := c.Find(nil).All(&results)
Run Code Online (Sandbox Code Playgroud)
我想通过以下代码发送'result'和一个int数组
GetTemplate("list").Execute(w,???????)
Run Code Online (Sandbox Code Playgroud)
如果只有db结果,我们可以使用它
GetTemplate("list").Execute(w,results)
Run Code Online (Sandbox Code Playgroud)
在模板中我们可以访问它{{.Name}}等(其中Name是[] User的结构字段)
请告诉我如何传递这些数据以及如何在模板中访问它们.
在简单输出值的golang 模板中,似乎指针会自动解除引用.什么时候.ID是一个指针int,
{{.ID}} 输出 5
但是当我尝试在管道中使用它时,{{if eq .ID 5}}我收到一个错误.
executing "mytemplate" at <eq .ID 5>: error calling eq: invalid type for comparison
如何在模板管道中取消引用指针?
使用Helm模板,我试图根据values.yaml中的数字生成服务器名称列表.此模板的点设置为数字(其为float64).
{{- define "zkservers" -}}
{{- $zkservers := list -}}
{{- range int . | until -}}
{{- $zkservers := print "zk-" . ".zookeeper" | append $zkservers -}}
{{- end -}}
{{- join "," $zkservers -}}
{{- end -}}
Run Code Online (Sandbox Code Playgroud)
对于3的输入,我希望这会产生:
zk-0.zookeeper,zk-1.zookeeper,zk-2.zookeeper
Run Code Online (Sandbox Code Playgroud)
它什么都不产生.
我知道范围块中的行是无操作,因为每次循环迭代时变量$ zkservers都是一个新变量.它与外部作用域中的$ zkservers不是同一个变量.
我希望意图清楚我想做什么.我不知道怎么做.
任何人都知道如何使用Helm模板执行此操作?
所以我有和html模板时使用此我得到对象:
<div>Foobar {{ index .Doc.Users 0}}</div>
Run Code Online (Sandbox Code Playgroud)
输出:
<div>Foobar {MyName my@email.com}</div>
Run Code Online (Sandbox Code Playgroud)
我只想使用Name尝试了多次迭代但没有成功的领域:
{{ index .Doc.Users.Name 0}}
{{ index .Doc.Users 0 .Name}}
{{ .Name index .Quote.Clients 0}}
...
Run Code Online (Sandbox Code Playgroud)
仅获取数组中第一个元素的.Name字段(.Doc.Users[0].Name)的正确语法是什么?
有没有办法在 Go 模板中“传播”参数?
在我的代码中,我有一个函数将结构列表的属性作为字符串切片返回
"colStr": func(col string, a ...interface{}) []string {
s := make([]string, len(a))
for i, v := range a {
if structs.IsStruct(v) {
s[i] = db.Str(structs.Map(v)[col])
}
}
return s
},
Run Code Online (Sandbox Code Playgroud)
但我如何传递给这个函数呢?在模板本身中,我有一些看起来像这样的东西
{{list (colStr `Number` .QuoteProofs...) `&`}}{{end}}
Run Code Online (Sandbox Code Playgroud)
但这给了我
模板:HTML:17:操作数中出现意外的 <.>
有没有办法用模板来做到这一点?
收到此错误消息后 kubectl apply -f .
error: error converting YAML to JSON: yaml: invalid map key: map[interface {}]interface {}{"include (print $.Template.BasePath \"/configmap.yaml\") . | sha256sum":interface {}(nil)}
Run Code Online (Sandbox Code Playgroud)
我试过放在checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}不同的地方,但我不太了解 YAML 或 JSON 来找出问题所在。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: demo
spec:
replicas: 1
selector:
matchLabels:
app: demo
template:
metadata:
labels:
app: demo
spec:
containers:
- name: demo
image: cloudnatived/demo:hello-config-env
ports:
- containerPort: 8888
env:
- name: GREETING
valueFrom:
configMapKeyRef:
name: demo-config
key: …Run Code Online (Sandbox Code Playgroud) 我需要使用 go 模板连接一个作用域变量和一个字符串,如下所示:
{{ $url := .Release.Namespace + ".myurl.com" }}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
go-templates ×10
go ×8
kubernetes ×2
interface ×1
json ×1
pointers ×1
python ×1
slice ×1
struct ×1
yaml ×1