Heim Backend-Entwicklung Golang So verwenden Sie goto in der Go-Sprache

So verwenden Sie goto in der Go-Sprache

Nov 23, 2022 pm 06:40 PM
go语言 goto

In der Go-Sprache wird die goto-Anweisung für bedingungslose Sprünge verwendet, die bedingungslos auf die angegebene Zeile im Programm übertragen werden können. Sie führt bedingungslose Sprünge zwischen Codes durch Beschriftungen durch. Auf goto folgt eine Bezeichnung. Die Bedeutung dieser Bezeichnung besteht darin, dem Go-Programm mitzuteilen, welche Codezeile als nächstes ausgeführt werden soll. Die Syntax lautet „goto label;... ...label: expression;“. goto unterbricht die ursprüngliche Codeausführungsreihenfolge und springt direkt zur angegebenen Zeile, um den Code auszuführen. Die goto-Anweisung wird normalerweise in Verbindung mit bedingten Anweisungen verwendet und kann zum Implementieren bedingter Übertragungen, zum Bilden von Schleifen und zum Herausspringen aus Schleifenkörpern verwendet werden.

So verwenden Sie goto in der Go-Sprache

Die Betriebsumgebung dieses Tutorials: Windows 7-System, GO Version 1.18, Dell G3-Computer.

Die goto-Anweisung in der Go-Sprache

goto Gu Yansi bedeutet „Sprung“.

Die goto-Anweisung der Go-Sprache kann bedingungslos zur angegebenen Zeile im Programm wechseln und über Beschriftungen bedingungslos zwischen Codes springen. Gleichzeitig ist die goto-Anweisung auch hilfreich, um schnell aus Schleifen zu springen und wiederholte Ausgänge zu vermeiden Anweisungen können den Implementierungsprozess einiger Codes vereinfachen.

Auf die Syntax der goto-Anweisung

goto folgt eine Beschriftung. Diese Beschriftung soll dem Go-Programm mitteilen, welche Codezeile als nächstes ausgeführt werden soll.

Also ist es bei goto das Wichtigste, darauf zu achten, wie und wo dieses Etikett platziert wird. Das Flussdiagramm der

goto 标签;
...
...
标签: 表达式;
Nach dem Login kopieren

goto-Anweisung sieht wie folgt aus:

So verwenden Sie goto in der Go-Sprache

Verwendung der goto-Anweisung

  • goto kann die ursprüngliche Codeausführungsreihenfolge unterbrechen und direkt zu einer bestimmten Codeausführungszeile springen.

import "fmt"

func main() {

    goto flag
    fmt.Println("B")
flag:
    fmt.Println("A")

}
Nach dem Login kopieren

Das Ausführungsergebnis gibt nicht B aus, sondern nur A.

A
Nach dem Login kopieren
  • goto-Anweisungen werden normalerweise in Verbindung mit bedingten Anweisungen verwendet. Es kann verwendet werden, um eine bedingte Übertragung zu implementieren, eine Schleife zu bilden, aus dem Schleifenkörper zu springen und andere Funktionen.

Hier ist ein Beispiel für die Verwendung von goto zur Implementierung einer Schleife, die 1 bis 5 ausgibt.

import "fmt"

func main() {
    i := 1
flag:
    if i <= 5 {
        fmt.Println(i)
        i++
        goto flag
    }
}
Nach dem Login kopieren

Die Ausgabe ist wie folgt

So verwenden Sie goto in der Go-Sprache

Ein weiteres Beispiel: Verwenden Sie goto, um den Effekt eines Typumbruchs zu erzielen.

import "fmt"

func main() {
    i := 1
    for {
        if i > 5 {
            goto flag
        }
        fmt.Println(i)
        i++
    }
flag:
}
Nach dem Login kopieren

Die Ausgabe sieht wie folgt aus

So verwenden Sie goto in der Go-Sprache

Verwenden Sie abschließend als Beispiel goto, um den Effekt des Typs continue zu erzielen und alle geraden Zahlen von 1 bis 10 zu drucken.

import "fmt"

func main() {
    i := 1
flag:
    for i <= 10 {
        if i%2 == 1 {
            i++
            goto flag
        }
        fmt.Println(i)
        i++
    }
}
Nach dem Login kopieren

Die Ausgabe ist wie folgt:

So verwenden Sie goto in der Go-Sprache

Verwenden Sie goto, um mehrstufige Schleifen zu verlassen. Der folgende Code muss zweistufige Schleifen kontinuierlich verlassen, wenn die Bedingungen erfüllt sind. Die herkömmliche Codierungsmethode lautet wie folgt folgt:

package main
import "fmt"
func main() {
    var breakAgain bool
    // 外循环
    for x := 0; x < 10; x++ {
        // 内循环
        for y := 0; y < 10; y++ {
            // 满足某个条件时, 退出循环
            if y == 2 {
                // 设置退出标记
                breakAgain = true
                // 退出本次循环
                break
            }
        }
        // 根据标记, 还需要退出一次循环
        if breakAgain {
                break
        }
    }
    fmt.Println("done")
}
Nach dem Login kopieren
Codebeschreibung Wie folgt:

Zeile 10, baue die äußere Schleife.

  • Zeile 13, konstruieren Sie die innere Schleife.

  • Zeile 16: Wenn y==2, müssen alle for-Schleifen beendet werden.

  • Zeile 19. Standardmäßig kann die Schleife nur Schicht für Schicht beendet werden. Dazu müssen Sie eine Zustandsvariable breakAgain festlegen. Wenn Sie sie beenden müssen, setzen Sie diese Variable auf true.

  • In Zeile 22 verwenden Sie break, um die aktuelle Schleife zu verlassen. Nach der Ausführung wird der Code in Zeile 28 übertragen.

  • Zeile 28: Verwenden Sie nach dem Verlassen einer Schicht der Schleife die Variable breakAgain, um zu bestimmen, ob die äußere Schicht der Schleife erneut verlassen werden muss.

  • Zeile 34, nach Verlassen aller Schleifen, Ausdruck fertig.

  • Optimieren Sie den obigen Code mithilfe der goto-Anweisung der Go-Sprache:

    package main
    import "fmt"
    func main() {
        for x := 0; x < 10; x++ {
            for y := 0; y < 10; y++ {
                if y == 2 {
                    // 跳转到标签
                    goto breakHere
                }
            }
        }
        // 手动返回, 避免执行进入标签
        return
        // 标签
    breakHere:
        fmt.Println("done")
    }
    Nach dem Login kopieren
  • Die Codebeschreibung lautet wie folgt:

Verwenden Sie in Zeile 13 die goto-Anweisung, um zur angegebenen Beschriftung zu springen, die online definiert ist 23.

  • Zeile 20, die Beschriftung kann nur von goto verwendet werden, hat jedoch keinen Einfluss auf den Codeausführungsprozess. Wenn Sie hier nicht manuell zurückkehren, wird auch die 24. Codezeile ausgeführt, wenn die Bedingungen nicht erfüllt sind.

  • Zeile 23, definiere das BreakHere-Tag.

  • Nach der Verwendung der goto-Anweisung können Sie alle Schleifen ohne zusätzliche Variablen schnell verlassen.

Verwenden Sie goto, um Fehler zentral zu behandeln

Es ist sehr schwierig, wenn bei der Behandlung mehrerer Fehler Codeduplizierungen auftreten, zum Beispiel:

err := firstCheckError()
if err != nil {
    fmt.Println(err)
    exitProcess()
    return
}
err = secondCheckError()
if err != nil {
    fmt.Println(err)
    exitProcess()
    return
}
fmt.Println("done")
Nach dem Login kopieren
Die Codebeschreibung lautet wie folgt:

Zeile 1, führen Sie a aus bestimmte Logik und geben einen Fehler zurück.

  • Zeile 2 bis 6: Wenn ein Fehler auftritt, drucken Sie den Fehler aus und beenden Sie den Vorgang.

  • Zeile 8, bestimmte Logik ausführen und einen Fehler zurückgeben.

  • Zeilen 10 bis 14, Beenden des Prozesses nach Auftreten eines Fehlers.

  • Zeile 16, keine Fehler, Druck abgeschlossen.

  • Im obigen Code handelt es sich teilweise um wiederholten Fehlerbehandlungscode. Wenn diesen Codes später weitere Beurteilungen hinzugefügt werden, müssen diese ähnlichen Codes nacheinander geändert werden, was leicht zu Versehen und Fehlern führen kann.

    使用 goto 语句来实现同样的逻辑:

        err := firstCheckError()
        if err != nil {
            goto onExit
        }
        err = secondCheckError()
        if err != nil {
            goto onExit
        }
        fmt.Println("done")
        return
    onExit:
        fmt.Println(err)
        exitProcess()
    Nach dem Login kopieren

    代码说明如下:

    • 第 3 行和第 9 行,发生错误时,跳转错误标签 onExit。

    • 第 17 行和第 18 行,汇总所有流程进行错误打印并退出进程。

    注意事项

    goto语句与标签之间不能有变量声明,否则编译错误。

    import "fmt"
    
    func main() {
        fmt.Println("start")
        goto flag
        var say = "hello oldboy"
        fmt.Println(say)
    flag:
        fmt.Println("end")
    }
    Nach dem Login kopieren

    编译错误

    .\main.go:7:7: goto flag jumps over declaration of say at .\main.go:8:6
    Nach dem Login kopieren

    【相关推荐:Go视频教程

    Das obige ist der detaillierte Inhalt vonSo verwenden Sie goto in der Go-Sprache. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was ist das Problem mit Warteschlangen -Thread in Go's Crawler Colly? Was ist das Problem mit Warteschlangen -Thread in Go's Crawler Colly? Apr 02, 2025 pm 02:09 PM

Das Problem der Warteschlange Threading In Go Crawler Colly untersucht das Problem der Verwendung der Colly Crawler Library in Go -Sprache. Entwickler stoßen häufig auf Probleme mit Threads und Anfordern von Warteschlangen. � ...

Welche Bibliotheken werden für die Operationen der schwimmenden Punktzahl in Go verwendet? Welche Bibliotheken werden für die Operationen der schwimmenden Punktzahl in Go verwendet? Apr 02, 2025 pm 02:06 PM

In der Bibliothek, die für den Betrieb der Schwimmpunktnummer in der GO-Sprache verwendet wird, wird die Genauigkeit sichergestellt, wie die Genauigkeit ...

Was soll ich tun, wenn die benutzerdefinierten Strukturbezeichnungen in Goland nicht angezeigt werden? Was soll ich tun, wenn die benutzerdefinierten Strukturbezeichnungen in Goland nicht angezeigt werden? Apr 02, 2025 pm 05:09 PM

Was soll ich tun, wenn die benutzerdefinierten Strukturbezeichnungen in Goland nicht angezeigt werden? Bei der Verwendung von Goland für GO -Sprachentwicklung begegnen viele Entwickler benutzerdefinierte Struktur -Tags ...

Warum hat das Drucken von Saiten mit Println und String () -Funktionen unterschiedliche Effekte? Warum hat das Drucken von Saiten mit Println und String () -Funktionen unterschiedliche Effekte? Apr 02, 2025 pm 02:03 PM

Der Unterschied zwischen Stringdruck in GO -Sprache: Der Unterschied in der Wirkung der Verwendung von Println und String () ist in Go ...

Welche Bibliotheken in GO werden von großen Unternehmen entwickelt oder von bekannten Open-Source-Projekten bereitgestellt? Welche Bibliotheken in GO werden von großen Unternehmen entwickelt oder von bekannten Open-Source-Projekten bereitgestellt? Apr 02, 2025 pm 04:12 PM

Welche Bibliotheken in GO werden von großen Unternehmen oder bekannten Open-Source-Projekten entwickelt? Bei der Programmierung in Go begegnen Entwickler häufig auf einige häufige Bedürfnisse, ...

Wie löste ich das Problem des Typs des user_id -Typs bei der Verwendung von Redis -Stream, um Nachrichtenwarteschlangen in GO -Sprache zu implementieren? Wie löste ich das Problem des Typs des user_id -Typs bei der Verwendung von Redis -Stream, um Nachrichtenwarteschlangen in GO -Sprache zu implementieren? Apr 02, 2025 pm 04:54 PM

Das Problem der Verwendung von RETISTREAM zur Implementierung von Nachrichtenwarteschlangen in der GO -Sprache besteht darin, die Go -Sprache und Redis zu verwenden ...

Was ist der Unterschied zwischen 'var' und 'Typ' Typenwort Definition in der GO -Sprache? Was ist der Unterschied zwischen 'var' und 'Typ' Typenwort Definition in der GO -Sprache? Apr 02, 2025 pm 12:57 PM

Zwei Möglichkeiten, Strukturen in der GO -Sprache zu definieren: Der Unterschied zwischen VAR- und Typ -Schlüsselwörtern. Bei der Definition von Strukturen sieht die Sprache oft zwei verschiedene Schreibweisen: Erstens ...

Warum ist es notwendig, Zeiger zu verabschieden, wenn sie GO- und Viper -Bibliotheken verwenden? Warum ist es notwendig, Zeiger zu verabschieden, wenn sie GO- und Viper -Bibliotheken verwenden? Apr 02, 2025 pm 04:00 PM

Go Zeigersyntax und Probleme bei der Verwendung der Viper -Bibliothek bei der Programmierung in Go -Sprache. Es ist entscheidend, die Syntax und Verwendung von Zeigern zu verstehen, insbesondere in ...

See all articles