标签: go-templates

界面中不相关方法的存在会破坏文本/模板吗?

游乐场链接: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)

interface go go-templates

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

替代python loop.last

我正在寻找使用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)

谢谢.

python go go-templates

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

在golang中处理模板错误的惯用方法

说我有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 go-templates

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

如何将多个数据传递给Go模板?

我想将两个数据对象传递给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的结构字段)

请告诉我如何传递这些数据以及如何在模板中访问它们.

go go-templates

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

在golang文本/模板中取消引用指针

在简单输出值的golang 模板中,似乎指针会自动解除引用.什么时候.ID是一个指针int,

{{.ID}} 输出 5

但是当我尝试在管道中使用它时,{{if eq .ID 5}}我收到一个错误.

executing "mytemplate" at <eq .ID 5>: error calling eq: invalid type for comparison

如何在模板管道中取消引用指针?

pointers go go-templates

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

Helm:生成以逗号分隔的列表

使用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模板执行此操作?

go-templates kubernetes kubernetes-helm

8
推荐指数
5
解决办法
8220
查看次数

如何在Go模板中访问数组的第一个索引的值

所以我有和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)的正确语法是什么?

struct go slice go-templates

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

Golang 模板中的可变参数

有没有办法在 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:操作数中出现意外的 <.>

有没有办法用模板来做到这一点?

variadic-functions go go-templates

8
推荐指数
0
解决办法
1331
查看次数

kubectl 应用错误:将 YAML 转换为 JSON 时出错

收到此错误消息后 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)

json yaml go-templates kubernetes kubernetes-helm

8
推荐指数
2
解决办法
1万
查看次数

如何使用 go 模板连接变量和字符串

我需要使用 go 模板连接一个作用域变量和一个字符串,如下所示:

{{ $url := .Release.Namespace + ".myurl.com" }}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

go go-templates

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