Beim Schreiben eines Programms werden Sie unweigerlich auf Situationen stoßen, die einen erneuten Versuch erfordern, z. B. Ausnahmen bei der Netzwerkverbindung, Fehler bei der Datenbankverbindung usw. Um Wiederholungen in früheren Programmiersprachen zu implementieren, war es normalerweise notwendig, mehrere Try-Catch-Anweisungen zu schreiben oder verschachtelte if-else-Anweisungen zu verwenden. Aber in der Go-Sprache können Sie eine einfache Bibliothek verwenden, um try-ähnliche Funktionen zu implementieren.
Go-Sprache ist eine von Google eingeführte Open-Source-Programmiersprache. Es handelt sich um eine statisch typisierte Sprache mit einem effizienten Compiler und typsicherer Speicherverwaltung. Das Kernkonzept der Go-Sprache ist Einfachheit und Benutzerfreundlichkeit, daher sind Syntax und Funktionen sehr prägnant und klar und man kann sogar sagen, dass es „keine Verschwendung“ gibt. Dieser einfache, aber effiziente Stil verleiht der Go-Sprache einzigartige Vorteile beim Schreiben von Netzwerkanwendungen, verteilten Systemen und Programmen mit hoher Parallelität.
Was die Bibliothek betrifft, die wir heute vorstellen werden, ist es die Try-Bibliothek, die Golang prägnanter und praktischer machen kann. Schauen wir uns an, wie Sie mit der Try-Bibliothek try-ähnliche Vorgänge in der Go-Sprache implementieren.
Bevor wir die Try-Bibliothek verwenden, müssen wir sie zuerst vorstellen. Sie können die Try-Bibliothek über den folgenden Befehl abrufen und installieren:
go get github.com/matryer/try
Nachdem wir sie eingeführt haben, können wir die Try-Bibliothek im Programm verwenden. Schauen wir uns an, wie Sie die Try-Bibliothek verwenden, um Wiederholungsvorgänge zu implementieren.
Die Try-Bibliothek stellt eine try.Do()-Funktion bereit, die einen Funktionsfehler vom Typ func() empfängt und versucht, die Funktion auszuführen. Wenn die Ausführung erfolgreich ist, wird nil direkt zurückgegeben; andernfalls wird der Vorgang wiederholt, bis die Ausführung erfolgreich ist oder die maximale Anzahl von Wiederholungsversuchen erreicht ist (Standard ist 10 Mal). Das Folgende ist der Beispielcode der Funktion try.Do():
err := try.Do(func() error { // 尝试执行该函数 return nil }) if err != nil { // 函数执行失败 }
Da die Funktion try.Do() einen Funktionsfehler vom Typ func() empfängt, müssen wir den Vorgang, der wiederholt werden muss, als Funktion definieren und legen Sie fest, dass die Funktion an die Funktion try.Do() übergeben wird. Beispielsweise simuliert die folgende Funktion eine abnormale Netzwerkverbindung:
func connect() error { // 假装网络连接异常 return errors.New("network error") }
Als nächstes können wir die Funktion try.Do() verwenden, um die Verbindung erneut zu versuchen:
err := try.Do(func() error { // 尝试连接网络 return connect() }) if err != nil { // 连接失败,输出错误信息 fmt.Println(err) }
Im obigen Code definieren wir eine connect()-Funktion, wie wir sie gewohnt sind Simulieren Sie abnormale Netzwerkverbindungen. Anschließend übergeben wir die Funktion connect() an die Funktion try.Do() und wiederholen den Vorgang während der Ausführung. Sollte die Verbindung irgendwann scheitern, wird ein Fehler zurückgegeben und wir können die Fehlermeldung im Programm ausgeben.
Zusätzlich zu den oben genannten Grundfunktionen bietet die Try-Bibliothek auch erweiterte Anwendungen, um Wiederholungsvorgänge bequemer und flexibler zu gestalten.
3.1 Passen Sie die maximale Anzahl von Wiederholungsversuchen an.
Wenn Sie die maximale Anzahl von Wiederholungsversuchen anpassen müssen, können Sie dies über das Attribut try.MaxRetries festlegen. Das folgende Codefragment legt beispielsweise die maximale Anzahl von Wiederholungsversuchen auf 5 fest:
try.MaxRetries = 5
Nach dem Festlegen wird die festgelegte maximale Anzahl von Wiederholungsversuchen jedes Mal verwendet, wenn die Funktion try.Do() aufgerufen wird.
3.2 Legen Sie das Wiederholungsintervall fest.
Verschiedene Wiederholungsvorgänge erfordern möglicherweise unterschiedliche Wiederholungsintervalle. Daher bietet die Try-Bibliothek auch eine Möglichkeit, das Wiederholungsintervall festzulegen. Das Intervall zwischen den einzelnen Wiederholungsversuchen kann über die try.Sleep-Funktion festgelegt werden, zum Beispiel:
try.Sleep(2 * time.Second)
Im obigen Code legen wir das Intervall zwischen den einzelnen Wiederholungsversuchen auf 2 Sekunden fest.
3.3 Legen Sie bestimmte Fehlertypen fest
Einige Fehler können nicht wiederholt werden, z. B. die Adresse ist nicht erreichbar, der Speicherplatz ist voll usw. Die try-Bibliothek stellt eine WithRetryIf()-Funktion bereit, die es uns ermöglicht, bestimmte Fehlertypen im Wiederholungsvorgang erneut zu versuchen. Das folgende Codefragment wiederholt beispielsweise Fehler nur dann, wenn die Netzwerkverbindung abnormal ist:
err := try.Do(func() error { // 尝试连接网络 return connect() }, try.RetryIf(func(err error) bool { // 针对网络连接异常的错误进行重试 if _, ok := err.(net.Error); ok { return true } else { return false } }))
Im obigen Code definieren wir zunächst eine connect()-Funktion, um die Situation einer abnormalen Netzwerkverbindung zu simulieren. Anschließend führen wir die Funktion connect() über die Funktion try.Do() aus und verwenden die Funktion WithRetryIf(), um den Fehler „Netzwerkverbindungsausnahme“ erneut zu beheben. In der Funktion RetryIf() ermitteln wir, ob der aktuelle Fehler zum Typ net.Error gehört, und geben in diesem Fall „true“ zurück, was angibt, dass ein erneuter Versuch erforderlich ist.
Anhand der obigen Einführung können wir sehen, dass es sehr einfach und bequem ist, die Try-Bibliothek zum Implementieren von Wiederholungsvorgängen in der Go-Sprache zu verwenden. Definieren Sie einfach die Funktion, die wiederholt werden muss, und übergeben Sie diese Funktion an die Funktion try.Do(). Die Try-Bibliothek bietet außerdem erweiterte Funktionen wie das Anpassen der maximalen Anzahl von Wiederholungsversuchen, das Festlegen des Wiederholungsintervalls und die Wiederholungsversuche für bestimmte Fehlertypen, wodurch Wiederholungsvorgänge flexibler und bequemer werden.
Natürlich verfügt die Go-Sprache zusätzlich zur Try-Bibliothek über einige andere leistungsstarke Bibliotheken, die zum Implementieren von Wiederholungsvorgängen verwendet werden können, z. B. Ubers go-retry und Hashicorps go-retryablehttp. Daher können wir beim Schreiben von Go-Sprachprogrammen basierend auf den tatsächlichen Anforderungen die am besten geeignete Bibliothek für Wiederholungsvorgänge auswählen.
Das obige ist der detaillierte Inhalt vonGolang implementiert try. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!