Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pergi templat jika syarat

Pergi templat jika syarat

王林
王林ke hadapan
2024-02-06 11:24:13412semak imbas

Go 模板 if 条件

Kandungan soalan

Bagaimana untuk menggabungkan fungsi andeq/ne bersama?

Saya menulis klip ini

{{ define "opsgenie.default.tmpl" }}
  <font size="+0"><b>{{.commonlabels.alertname }}</b></font>
  {{- range $i, $alert := .alerts }}
  <font size="+0">{{ .annotations.description }}</font>
  {{- end -}}
  {{- "\n" -}}
  {{- "\n" -}}
  {{- if and eq .commonlabels.infoalert "true" eq .commonlabels.topic "database" -}}
  grafana: https://{{ .commonlabels.url }}
  {{- "\n" -}}{{- end -}}
  {{- if and ne .commonlabels.infoalert "true" eq .commonlabels.topic "database" -}}
  database:
    • https://{{ .commonlabels.url }}/
    • https://{{ .commonlabels.url }}/
  {{- "\n" -}}{{- end -}}
  {{- end -}}
  {{- end -}}
{{- end -}}

Matlamatnya ialah:

  • Jika makluman saya mengandungi dua label infoalert: truetopic:database hanya pautan grafana ditunjukkan
  • Jika makluman saya hanya mengandungi tag topic: database 但不包含 infoalert: true maka hanya pautan databsse akan ditunjukkan

Nampaknya sintaks untuk {{- if and eq .commonlabels.infoalert "true" eq .commonlabels.topic "database" -}} bersyarat tidak betul kerana saya mendapat ralat ini dalam alertmanager.log apabila amaran dicetuskan:

notify retry canceled due to unrecoverable error after 1 attempts: templating error: template: email.tmpl:24:17: executing \"opsgenie.default.tmpl\" at <eq>: wrong number of args for eq: want at least 1 got 0

Jawapan betul


Hanya gunakan kurungan untuk mengelompokkan ungkapan:

{{- if and (eq .commonlabels.infoalert "true") (eq .commonlabels.topic "database") -}}

{{- if and (ne .commonlabels.infoalert "true") (eq .commonlabels.topic "database") -}}

Lihat contoh yang boleh diuji ini:

func main() {
    t := template.must(template.new("").parse(src))

    m := map[string]any{
        "infoalert": "true",
        "topic":     "database",
    }
    if err := t.execute(os.stdout, m); err != nil {
        panic(err)
    }

    fmt.println("second round")
    m["infoalert"] = "false"
    if err := t.execute(os.stdout, m); err != nil {
        panic(err)
    }
}

const src = `
{{- if and (eq .infoalert "true") (eq .topic "database") -}}
    infoalert is true and topic is database
{{- end -}}
{{- if and (ne .infoalert "true") (eq .topic "database") -}}
    infoalert is not true and topic is database
{{ end }}
`

Ini akan menghasilkan (cuba di pergi taman permainan):

infoalert is true and topic is database
Second round
infoalert is NOT true and topic is database

Atas ialah kandungan terperinci Pergi templat jika syarat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam