Maison >développement back-end >Golang >Aller au modèle si condition
Comment combiner and
和 eq/ne
fonctions ensemble ?
J'ai écrit ce clip
{{ 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 -}}
L'objectif est :
infoalert: true
和 topic:database
seul le lien grafana est affichétopic: database
但不包含 infoalert: true
alors seul le lien databsse sera affichéIl semble que la syntaxe du conditionnel {{- if and eq .commonlabels.infoalert "true" eq .commonlabels.topic "database" -}}
soit incorrecte car j'obtiens cette erreur dans alertmanager.log lorsque l'alerte est déclenchée :
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
Utilisez simplement des parenthèses pour regrouper les expressions :
{{- if and (eq .commonlabels.infoalert "true") (eq .commonlabels.topic "database") -}} {{- if and (ne .commonlabels.infoalert "true") (eq .commonlabels.topic "database") -}}
Découvrez cet exemple testable :
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 }} `
Cela affichera (essayez-le sur go terrain de jeu) :
infoalert is true and topic is database Second round infoalert is NOT true and topic is database
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!