Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menggunakan goto dalam bahasa go

Cara menggunakan goto dalam bahasa go

青灯夜游
青灯夜游asal
2022-11-23 18:40:495902semak imbas

Dalam bahasa Go, pernyataan goto digunakan untuk lompatan tanpa syarat, yang boleh dipindahkan tanpa syarat ke baris yang ditentukan dalam atur cara ia melakukan lompatan tanpa syarat antara kod melalui label. goto diikuti dengan label Maksud label ini adalah untuk memberitahu program Go yang baris kod untuk dilaksanakan seterusnya. goto memecahkan perintah pelaksanaan kod asal dan melompat terus ke baris yang ditentukan untuk melaksanakan kod penyataan goto biasanya digunakan bersama dengan pernyataan bersyarat dan boleh digunakan untuk melaksanakan pemindahan bersyarat, membentuk gelung dan melompat keluar dari badan gelung.

Cara menggunakan goto dalam bahasa go

Persekitaran pengendalian tutorial ini: sistem Windows 7, GO versi 1.18, komputer Dell G3.

Pernyataan goto dalam bahasa go

goto Gu Yansiyi bermaksud lompat.

Pernyataan goto bahasa Go boleh dipindahkan tanpa syarat ke baris yang ditentukan dalam program dan melompat tanpa syarat antara kod melalui label Pada masa yang sama, pernyataan goto juga membantu dalam melompat keluar dari gelung dengan cepat dan mengelakkan berulang keluar. Gunakan Pernyataan goto boleh memudahkan proses pelaksanaan beberapa kod.

Sintaks pernyataan goto

goto diikuti dengan label Maksud label ini adalah untuk memberitahu program Go yang baris kod untuk dilaksanakan seterusnya.

Jadi bagaimana dan di mana untuk meletakkan label ini adalah perkara yang paling penting untuk diberi perhatian dalam goto.

goto 标签;
...
...
标签: 表达式;

Carta alir pernyataan goto adalah seperti berikut:

Cara menggunakan goto dalam bahasa go

Penggunaan pernyataan goto

  • goto boleh memecahkan susunan pelaksanaan kod asal dan melompat terus ke baris kod tertentu untuk dilaksanakan.

import "fmt"

func main() {

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

}

Hasil pelaksanaan tidak akan mengeluarkan B, tetapi hanya akan mengeluarkan A

A
  • pernyataan goto biasanya sama seperti pernyataan bersyarat digunakan bersama. Ia boleh digunakan untuk melaksanakan pemindahan bersyarat, membentuk gelung, melompat keluar dari badan gelung dan fungsi lain.

Berikut ialah contoh penggunaan goto untuk melaksanakan gelung yang mencetak 1 hingga 5.

import "fmt"

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

Output adalah seperti berikut

Cara menggunakan goto dalam bahasa go

Sebagai contoh lain, gunakan goto untuk mencapai kesan jenis break.

import "fmt"

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

Output adalah seperti berikut

Cara menggunakan goto dalam bahasa go

Akhir sekali, sebagai contoh, gunakan goto untuk mencapai kesan jenis continue, mencetak semua nombor genap daripada 1 hingga 10.

import "fmt"

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

Output adalah seperti berikut

Cara menggunakan goto dalam bahasa go

Gunakan goto untuk keluar dari gelung berbilang lapisan

Kod berikut perlu terus keluar dari dua peringkat gelung apabila syarat dipenuhi Kaedah pengekodan tradisional adalah seperti berikut:

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")
}

Penerangan kod adalah seperti berikut:

  • Tidak. 10 OK, bina gelung luar.

  • Barisan 13, bina gelung dalam.

  • Barisan 16, apabila y==2, semua untuk gelung perlu dikeluarkan.

  • Baris 19. Secara lalai, gelung hanya boleh keluar dari lapisan demi lapisan Untuk melakukan ini, anda perlu menetapkan pembolehubah keadaanSemula Apabila anda perlu keluar, tetapkan pembolehubah ini benar.

  • Dalam baris 22, gunakan break untuk keluar dari gelung semasa Selepas pelaksanaan, kod dipindahkan ke baris 28.

  • Baris 28, selepas keluar dari gelung, tentukan sama ada perlu untuk keluar dari gelung luar sekali lagi berdasarkan pembolehubah breakAgain.

  • Barisan 34, selepas keluar dari semua gelung, cetakan selesai.

Gunakan pernyataan goto bagi bahasa Go untuk mengoptimumkan kod di atas:

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")
}

Penerangan kod adalah seperti berikut:

  • Pada baris 13, gunakan pernyataan goto untuk melompat ke label yang ditentukan Label ditakrifkan pada baris 23.

  • Baris 20, label hanya boleh digunakan oleh goto, tetapi ia tidak menjejaskan proses pelaksanaan kod Jika anda tidak kembali secara manual di sini, baris ke-24 kod juga dilaksanakan apabila syarat tidak dipenuhi.

  • Baris 23, mentakrifkan teg breakHere.

Selepas menggunakan pernyataan goto, semua gelung boleh dikeluarkan dengan cepat tanpa pembolehubah tambahan.

Gunakan goto untuk mengendalikan ralat secara berpusat

Sangat rumit apabila terdapat kod pendua dalam pengendalian ralat berbilang, contohnya:

err := firstCheckError()
if err != nil {
    fmt.Println(err)
    exitProcess()
    return
}
err = secondCheckError()
if err != nil {
    fmt.Println(err)
    exitProcess()
    return
}
fmt.Println("done")

Perihalan kod adalah seperti berikut:

  • Baris 1, melaksanakan logik tertentu dan mengembalikan ralat.

  • Baris 2 hingga 6, jika ralat berlaku, cetak ralat dan keluar dari proses.

  • Barisan 8, melaksanakan logik tertentu dan mengembalikan ralat.

  • Baris 10 hingga 14, keluar dari proses selepas ralat berlaku.

  • Barisan 16, tiada ralat, cetakan selesai.

Dalam kod di atas, sebahagian daripada kod pengendalian ralat berulang Jika anda menambahkan lebih banyak pertimbangan pada kod ini, anda perlu mengubah suai kod serupa ini mengikut urutan menyebabkan kesilapan dan kesilapan.

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

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

代码说明如下:

  • 第 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")
}

编译错误

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

【相关推荐:Go视频教程

Atas ialah kandungan terperinci Cara menggunakan goto dalam bahasa go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn