Rumah pembangunan bahagian belakang Golang Cara menggunakan goto dalam bahasa go

Cara menggunakan goto dalam bahasa go

Nov 23, 2022 pm 06:40 PM
pergi bahasa goto

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 标签;
...
...
标签: 表达式;
Salin selepas log masuk

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

}
Salin selepas log masuk

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

A
Salin selepas log masuk
  • 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
    }
}
Salin selepas log masuk

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:
}
Salin selepas log masuk

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++
    }
}
Salin selepas log masuk

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")
}
Salin selepas log masuk

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")
}
Salin selepas log masuk

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")
Salin selepas log masuk

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()
Salin selepas log masuk

代码说明如下:

  • 第 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")
}
Salin selepas log masuk

编译错误

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

【相关推荐: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 Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah masalah dengan thread giliran di crawler colly go? Apakah masalah dengan thread giliran di crawler colly go? Apr 02, 2025 pm 02:09 PM

Masalah Threading Giliran di GO Crawler Colly meneroka masalah menggunakan Perpustakaan Colly Crawler dalam bahasa Go, pemaju sering menghadapi masalah dengan benang dan permintaan beratur. � ...

Perpustakaan apa yang digunakan untuk operasi nombor terapung di GO? Perpustakaan apa yang digunakan untuk operasi nombor terapung di GO? Apr 02, 2025 pm 02:06 PM

Perpustakaan yang digunakan untuk operasi nombor terapung dalam bahasa Go memperkenalkan cara memastikan ketepatannya ...

Apa yang perlu saya lakukan jika label struktur tersuai di Goland tidak dipaparkan? Apa yang perlu saya lakukan jika label struktur tersuai di Goland tidak dipaparkan? Apr 02, 2025 pm 05:09 PM

Apa yang perlu saya lakukan jika label struktur tersuai di Goland tidak dipaparkan? Apabila menggunakan Goland untuk Pembangunan Bahasa GO, banyak pemaju akan menghadapi tag struktur tersuai ...

Di Go, mengapa rentetan percetakan dengan fungsi println dan rentetan () mempunyai kesan yang berbeza? Di Go, mengapa rentetan percetakan dengan fungsi println dan rentetan () mempunyai kesan yang berbeza? Apr 02, 2025 pm 02:03 PM

Perbezaan antara percetakan rentetan dalam bahasa Go: perbezaan kesan menggunakan fungsi println dan rentetan () sedang ...

Perpustakaan mana yang dibangunkan oleh syarikat besar atau disediakan oleh projek sumber terbuka yang terkenal? Perpustakaan mana yang dibangunkan oleh syarikat besar atau disediakan oleh projek sumber terbuka yang terkenal? Apr 02, 2025 pm 04:12 PM

Perpustakaan mana yang dibangunkan oleh syarikat besar atau projek sumber terbuka yang terkenal? Semasa pengaturcaraan di GO, pemaju sering menghadapi beberapa keperluan biasa, ...

Bagaimana menyelesaikan masalah penukaran jenis user_id semasa menggunakan aliran redis untuk melaksanakan beratur mesej dalam bahasa Go? Bagaimana menyelesaikan masalah penukaran jenis user_id semasa menggunakan aliran redis untuk melaksanakan beratur mesej dalam bahasa Go? Apr 02, 2025 pm 04:54 PM

Masalah menggunakan redisstream untuk melaksanakan beratur mesej dalam bahasa Go menggunakan bahasa Go dan redis ...

Apakah perbezaan antara struktur definisi kata kunci `var` dan` type` dalam bahasa Go? Apakah perbezaan antara struktur definisi kata kunci `var` dan` type` dalam bahasa Go? Apr 02, 2025 pm 12:57 PM

Dua cara untuk menentukan struktur dalam bahasa Go: perbezaan antara VAR dan jenis kata kunci. Apabila menentukan struktur, pergi bahasa sering melihat dua cara menulis yang berbeza: pertama ...

Kenapa perlu lulus petunjuk apabila menggunakan perpustakaan Go dan Viper? Kenapa perlu lulus petunjuk apabila menggunakan perpustakaan Go dan Viper? Apr 02, 2025 pm 04:00 PM

GO Pointer Syntax dan menangani masalah dalam penggunaan perpustakaan Viper semasa pengaturcaraan dalam bahasa Go, adalah penting untuk memahami sintaks dan penggunaan petunjuk, terutama dalam ...

See all articles