Heim > Backend-Entwicklung > Golang > Go-Vorlage, wenn Bedingung

Go-Vorlage, wenn Bedingung

王林
Freigeben: 2024-02-06 11:24:13
nach vorne
430 Leute haben es durchsucht

Go 模板 if 条件

Frageninhalt

Wie kombiniere ich andeq/ne Funktionen miteinander?

Ich habe diesen Clip geschrieben

{{ 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 -}}
Nach dem Login kopieren

Das Ziel ist:

  • Wenn meine Benachrichtigung zwei Labels enthält infoalert: truetopic:database wird nur der Grafana-Link angezeigt
  • Wenn meine Benachrichtigung nur Tags enthält topic: database 但不包含 infoalert: true, wird nur der Datenbanklink angezeigt

Es sieht so aus, als ob die Syntax für die Bedingung {{- if and eq .commonlabels.infoalert "true" eq .commonlabels.topic "database" -}} falsch ist, weil ich diesen Fehler in „alertmanager.log“ erhalte, wenn die Warnung ausgelöst wird:

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
Nach dem Login kopieren


Richtige Antwort


Verwenden Sie einfach Klammern, um Ausdrücke zu gruppieren:

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

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

Schauen Sie sich dieses testbare Beispiel an:

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 }}
`
Nach dem Login kopieren

Dies wird ausgegeben (versuchen Sie es auf Go Playground):

infoalert is true and topic is database
Second round
infoalert is NOT true and topic is database
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonGo-Vorlage, wenn Bedingung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage