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

Pergi templat jika syarat

王林
Lepaskan: 2024-02-06 11:24:13
ke hadapan
438 orang telah melayarinya

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 -}}
Salin selepas log masuk

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
Salin selepas log masuk


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") -}}
Salin selepas log masuk

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 }}
`
Salin selepas log masuk

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
Salin selepas log masuk

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

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan