

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Verwendung der Template-Sprache von Go
<a name="v9-alerting-notifications-go-templating"></a>

****  
Dieses Dokumentationsthema wurde für Grafana-Workspaces entwickelt, die **Grafana-Version 9.x** unterstützen.  
Informationen zu Grafana-Arbeitsbereichen, die Grafana-Version 10.x unterstützen, finden Sie unter. [Arbeitet in Grafana-Version 10](using-grafana-v10.md)  
Informationen zu Grafana-Arbeitsbereichen, die Grafana-Version 8.x unterstützen, finden Sie unter. [Arbeitet in Grafana-Version 8](using-grafana-v8.md)

[Sie schreiben Benachrichtigungsvorlagen in der Vorlagensprache von Go, Text/Vorlage.](https://pkg.go.dev/text/template)

Dieser Abschnitt bietet einen Überblick über die Vorlagensprache von Go und das Schreiben von Vorlagen in Text/Vorlage.

## Punkt
<a name="v9-go-dot"></a>

Darin text/template befindet sich ein spezieller Cursor namens Punkt, der als geschrieben wird`.`. Sie können sich diesen Cursor als eine Variable vorstellen, deren Wert sich ändert, je nachdem, wo in der Vorlage er verwendet wird. Beispielsweise `.` bezieht sich eine Benachrichtigungsvorlage zu Beginn auf das `ExtendedData` Objekt, das eine Reihe von Feldern enthält`Alerts`, darunter `Status``GroupLabels`,`CommonLabels`, `CommonAnnotations` und`ExternalURL`. Punkt kann sich jedoch auf etwas anderes beziehen, wenn es in einer Liste verwendet wird, wenn `range` es in einer Liste verwendet wird, wenn es innerhalb einer verwendet wird oder wenn Feature-Vorlagen geschrieben werden`with`, die in anderen Vorlagen verwendet werden sollen. Beispiele dafür finden Sie in [Vorlagen für Benachrichtigungen erstellen](v9-alerting-create-templates.md) und alle Daten und Funktionen in der[Vorlage – Referenz](v9-alerting-template-reference.md).

## Tags öffnen und schließen
<a name="v9-go-openclosetags"></a>

In text/template beginnen `{{` und enden Vorlagen mit, `}}` unabhängig davon, ob die Vorlage eine Variable druckt oder Kontrollstrukturen wie if-Anweisungen ausführt. Dies unterscheidet sich von anderen Template-Sprachen wie Jinja, wo das Drucken einer Variablen und und `{{` Kontrollstrukturen `}}` und verwenden. `{%` `%}`

## Print (Ausgabe)
<a name="v9-go-print"></a>

Um den Wert von etwas zu drucken, verwende `{{` und. `}}` Sie können den Wert eines Punkts, ein Punktfeld, das Ergebnis einer Funktion und den Wert einer [Variablen](#v9-go-variables) drucken. Um beispielsweise das `Alerts` Feld zu drucken, auf das sich der Punkt bezieht, würden `ExtendedData` Sie Folgendes schreiben:

```
{{ .Alerts }}
```

## Iterieren Sie über Warnmeldungen
<a name="v9-go-iterate-alerts"></a>

Um nur die Beschriftungen jeder Warnung und nicht alle Informationen über die Warnung zu drucken, können Sie a verwenden, um die Warnungen in `range` folgenden Schritten zu iterieren: `ExtendedData`

```
{{ range .Alerts }}
{{ .Labels }}
{{ end }}
```

Innerhalb des Bereichs bezieht sich der Punkt nicht mehr auf`ExtendedData`, sondern auf eine`Alert`. Sie können `{{ .Labels }}` es verwenden, um die Beschriftungen der einzelnen Warnmeldungen zu drucken. Das funktioniert, weil `{{ range .Alerts }}` sich der Punkt so ändert, dass er sich auf die aktuelle Warnung in der Liste der Benachrichtigungen bezieht. Wenn der Bereich abgeschlossen ist, wird der Punkt auf den Wert zurückgesetzt, den er vor dem Beginn des Bereichs hatte. In diesem Beispiel ist das`ExtendedData`:

```
{{ range .Alerts }}
{{ .Labels }}
{{ end }}
{{/* does not work, .Labels does not exist here */}}
{{ .Labels }}
{{/* works, cursor was reset */}}
{{ .Status }}
```

## Iterieren Sie über Anmerkungen und Beschriftungen
<a name="v9-go-iterate-labels"></a>

Lassen Sie uns eine Vorlage schreiben, um die Beschriftungen jeder Warnung in dem Format zu drucken`The name of the label is $name, and the value is $value`, in dem sie den Namen `$name` und den Wert jedes Labels `$value` enthalten.

Verwenden Sie wie im vorherigen Beispiel einen Bereich, um über die Warnungen zu iterieren, sodass der Punkt auf die aktuelle Warnung in der Liste der Warnungen verweist, und verwenden Sie dann einen zweiten Bereich für die sortierten Beschriftungen, sodass der Punkt ein zweites Mal aktualisiert wird, sodass er auf das aktuelle Label verweist. `.Alerts` Verwenden Sie innerhalb des zweiten Bereichs `.Name` und`.Value`, um den Namen und den Wert jedes Labels zu drucken:

```
{{ range .Alerts }}
{{ range .Labels.SortedPairs }}
The name of the label is {{ .Name }}, and the value is {{ .Value }}
{{ end }}
{{ range .Annotations.SortedPairs }}
The name of the annotation is {{ .Name }}, and the value is {{ .Value }}
{{ end }}
{{ end }}
```

## Wenn Aussagen
<a name="v9-go-if"></a>

Sie können if-Anweisungen in Vorlagen verwenden. Um beispielsweise zu drucken, `There are no alerts` wenn keine Warnmeldungen enthalten sind, würden `.Alerts` Sie Folgendes schreiben:

```
{{ if .Alerts }}
There are alerts
{{ else }}
There are no alerts
{{ end }}
```

## Mit
<a name="v9-go-with"></a>

With ähnelt if-Anweisungen, `with` aktualisiert jedoch im Gegensatz zu if-Anweisungen den Punkt so, dass er auf den Wert von with verweist:

```
{{ with .Alerts }}
There are {{ len . }} alert(s)
{{ else }}
There are no alerts
{{ end }}
```

## Variablen
<a name="v9-go-variables"></a>

Variablen in text/template müssen innerhalb der Vorlage erstellt werden. Um beispielsweise eine Variable zu erstellen, die `$variable` mit dem aktuellen Wert von Punkt aufgerufen wird, würden Sie Folgendes schreiben:

```
{{ $variable := . }}
```

Sie können `$variable` innerhalb eines Bereichs oder verwenden `with` und es bezieht sich auf den Wert von Punkt zu dem Zeitpunkt, als die Variable definiert wurde, und nicht auf den aktuellen Wert von Punkt.

Sie können beispielsweise keine Vorlage schreiben, die den zweiten `{{ .Labels }}` Bereich verwendet, da sich Punkt hier auf das aktuelle Label bezieht, nicht auf die aktuelle Warnung:

```
{{ range .Alerts }}
{{ range .Labels.SortedPairs }}
{{ .Name }} = {{ .Value }}
{{/* does not work because in the second range . is a label not an alert */}}
There are {{ len .Labels }}
{{ end }}
{{ end }}
```

Sie können dies beheben, indem Sie eine Variable definieren, die `$alert` im ersten Bereich und vor dem zweiten Bereich aufgerufen wird:

```
{{ range .Alerts }}
{{ $alert := . }}
{{ range .Labels.SortedPairs }}
{{ .Name }} = {{ .Value }}
{{/* works because $alert refers to the value of dot inside the first range */}}
There are {{ len $alert.Labels }}
{{ end }}
{{ end }}
```

## Bereich mit Index
<a name="v9-go-rangeindex"></a>

Sie können den Index jeder Warnung innerhalb eines Bereichs abrufen, indem Sie Index- und Wertvariablen am Anfang des Bereichs definieren:

```
{{ $num_alerts := len .Alerts }}
{{ range $index, $alert := .Alerts }}
This is alert {{ $index }} out of {{ $num_alerts }}
{{ end }}
```

## Definieren Sie Vorlagen
<a name="v9-go-define"></a>

Sie können Vorlagen definieren, die in anderen Vorlagen verwendet werden können, indem Sie `define` den Namen der Vorlage in doppelten Anführungszeichen verwenden. Sie sollten keine Vorlagen mit demselben Namen wie andere Vorlagen definieren, einschließlich Standardvorlagen wie `__subject``__text_values_list`,`__text_alert_list`, `default.title` und`default.message`. Wenn eine Vorlage mit demselben Namen wie eine Standardvorlage oder eine Vorlage in einer anderen Benachrichtigungsvorlage erstellt wurde, verwendet Grafana möglicherweise eine der beiden Vorlagen. Grafana verhindert nicht und zeigt auch keine Fehlermeldung an, wenn es zwei oder mehr Vorlagen mit demselben Namen gibt.

```
{{ define "print_labels" }}
{{ end }}
```

## Vorlagen einbetten
<a name="v9-go-embed"></a>

Sie können eine definierte Vorlage in Ihre Vorlage einbetten`template`, indem Sie den Namen der Vorlage in doppelten Anführungszeichen und den Cursor, der an die Vorlage übergeben werden soll, verwenden:

```
{{ template "print_labels" . }}
```

## Übergeben Sie Daten an Vorlagen
<a name="v9-go-passdata"></a>

Innerhalb einer Vorlage bezieht sich der Punkt auf den Wert, der an die Vorlage übergeben wird.

Wenn einer Vorlage beispielsweise eine Liste mit Auslösewarnungen übergeben wird, bezieht sich Punkt auf diese Liste von Auslösewarnungen:

```
{{ template "print_alerts" .Alerts }}
```

Wenn der Vorlage die sortierten Labels für eine Warnung übergeben werden, bezieht sich Punkt auf die Liste der sortierten Labels:

```
{{ template "print_labels" .SortedLabels }}
```

Dies ist nützlich, wenn Sie wiederverwendbare Vorlagen schreiben. Um beispielsweise alle Benachrichtigungen zu drucken, könnten Sie Folgendes schreiben:

```
{{ template "print_alerts" .Alerts }}
```

Um dann nur die Feuermeldungen auszudrucken, könnten Sie Folgendes schreiben:

```
{{ template "print_alerts" .Alerts.Firing }}
```

Das funktioniert, weil es sich bei beiden `.Alerts` um Listen von Warnmeldungen `.Alerts.Firing` handelt.

```
{{ define "print_alerts" }}
{{ range . }}
{{ template "print_labels" .SortedLabels }}
{{ end }}
{{ end }}
```

## Kommentare
<a name="v9-go-comments"></a>

Sie können Kommentare hinzufügen mit `{{/*` und`*/}}`:

```
{{/* This is a comment */}}
```

Um zu verhindern, dass Kommentare Zeilenumbrüche hinzufügen, verwende:

```
{{- /* This is a comment with no leading or trailing line breaks */ -}}
```

## Einrückung
<a name="v9-go-indentation"></a>

Sie können Einzüge, sowohl Tabulatoren als auch Leerzeichen, und Zeilenumbrüche verwenden, um die Lesbarkeit von Vorlagen zu verbessern:

```
{{ range .Alerts }}
  {{ range .Labels.SortedPairs }}
    {{ .Name }} = {{ .Value }}
  {{ end }}
{{ end }}
```

Einrückungen in der Vorlage werden jedoch auch im Text vorhanden sein. Als nächstes werden wir sehen, wie man es entfernt.

## Entferne Leerzeichen und Zeilenumbrüche
<a name="v9-go-removespace"></a>

Wird text/template verwendet `{{-` und dient `-}}` zum Entfernen von führenden und nachfolgenden Leerzeichen und Zeilenumbrüchen.

Wenn Sie beispielsweise Einrückungen und Zeilenumbrüche verwenden, um eine Vorlage lesbarer zu machen:

```
{{ range .Alerts }}
  {{ range .Labels.SortedPairs }}
    {{ .Name }} = {{ .Value }}
  {{ end }}
{{ end }}
```

Der Einzug und die Zeilenumbrüche werden auch im Text vorhanden sein:

```
    alertname = "Test"

    grafana_folder = "Test alerts"
```

Sie können den Einzug und die Zeilenumbrüche aus dem Text entfernen, indem Sie `}}` zu `-}}` Beginn jedes Bereichs wechseln:

```
{{ range .Alerts -}}
  {{ range .Labels.SortedPairs -}}
    {{ .Name }} = {{ .Value }}
  {{ end }}
{{ end }}
```

Der Einzug und die Zeilenumbrüche in der Vorlage fehlen jetzt im Text:

```
alertname = "Test"
grafana_folder = "Test alerts"
```