我的编程空间,编程开发者的网络收藏夹
学习永远不晚

go语言中goto怎么用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

go语言中goto怎么用

本教程操作环境:windows7系统、GO 1.18版本、Dell G3电脑。

go语言中的goto语句

goto 顾言思义,是跳转的意思。

Go 语言的 goto 语句可以无条件地转移到程序中指定的行,通过标签进行代码间的无条件跳转,同时 goto 语句在快速跳出循环、避免重复退出上也有一定的帮助,使用 goto 语句能简化一些代码的实现过程。

goto语句的语法

goto 后接一个标签,这个标签的意义是告诉 Go程序下一步要执行哪行的代码。

所以这个标签如何放置,放置在哪里,是 goto 里最需要注意的。

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

goto 语句流程图如下:

1.png

goto语句的使用

  • goto 可以打破原有代码执行顺序,直接跳转到某一行执行代码。

import "fmt"

func main() {

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

}

执行结果,并不会输出 B ,而只会输出 A

A
  • goto 语句通常与条件语句配合使用。可用来实现条件转移, 构成循环,跳出循环体等功能。

这边举一个例子,用 goto 的方式来实现一个打印 1到5 的循环。

import "fmt"

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

输出如下

2.png

再举个例子,使用 goto 实现 类型 break 的效果。

import "fmt"

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

输出如下

3.png

最后再举个例子,使用 goto 实现 类型 continue的效果,打印 1到10 的所有偶数。

import "fmt"

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

输出如下

4.png

使用 goto 退出多层循环

下面这段代码在满足条件时,需要连续退出两层循环,使用传统的编码方式如下:

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

代码说明如下:

  • 第 10 行,构建外循环。

  • 第 13 行,构建内循环。

  • 第 16 行,当 y==2 时需要退出所有的 for 循环。

  • 第 19 行,默认情况下循环只能一层一层退出,为此就需要设置一个状态变量 breakAgain,需要退出时,设置这个变量为 true。

  • 第 22 行,使用 break 退出当前循环,执行后,代码调转到第 28 行。

  • 第 28 行,退出一层循环后,根据 breakAgain 变量判断是否需要再次退出外层循环。

  • 第 34 行,退出所有循环后,打印 done。

将上面的代码使用Go语言的 goto 语句进行优化:

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

代码说明如下:

  • 第 13 行,使用 goto 语句跳转到指明的标签处,标签在第 23 行定义。

  • 第 20 行,标签只能被 goto 使用,但不影响代码执行流程,此处如果不手动返回,在不满足条件时,也会执行第 24 行代码。

  • 第 23 行,定义 breakHere 标签。

使用 goto 语句后,无须额外的变量就可以快速退出所有的循环。

使用 goto 集中处理错误

多处错误处理存在代码重复时是非常棘手的,例如:

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

代码说明如下:

  • 第 1 行,执行某逻辑,返回错误。

  • 第 2~6 行,如果发生错误,打印错误退出进程。

  • 第 8 行,执行某逻辑,返回错误。

  • 第 10~14 行,发生错误后退出流程。

  • 第 16 行,没有任何错误,打印完成。

在上面代码中,有一部分都是重复的错误处理代码,如果后期在这些代码中添加更多的判断,就需要在这些雷同的代码中依次修改,极易造成疏忽和错误。

使用 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

相关推荐:《C视频教程》

以上就是go语言中goto怎么用的详细内容,更多请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

go语言中goto怎么用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

go语言中goto怎么用

在go语言中,goto语句用于无条件跳转,可以无条件地转移到程序中指定的行;它通过标签进行代码间的无条件跳转。goto后接一个标签,这个标签的意义是告诉Go程序下一步要执行哪行的代码,语法“goto 标签;... ...标签: 表达式;”。goto打破原有代码执行顺序,直接跳转到指定行执行代码;goto语句通常与条件语句配合使用,可用来实现条件转移、构成循环、跳出循环体等功能。
2022-11-23

go语言中goto如何用

本文小编为大家详细介绍“go语言中goto如何用”,内容详细,步骤清晰,细节处理妥当,希望这篇“go语言中goto如何用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。在go语言中,goto语句用于无条件跳转,可以
2023-07-04

c语言goto怎么用

goto 语句是一种 c 语言跳转语句,允许程序直接从当前位置跳转到程序中另一个标记位置。由于其可能导致程序难以理解、维护和调试,因此不推荐使用,但可以在没有替代方案的情况下谨慎使用。C 语言中的 goto 语句goto 语句是一种跳转语
c语言goto怎么用
2024-05-15

c语言中goto语句怎么使用

这篇文章主要介绍“c语言中goto语句怎么使用”,在日常操作中,相信很多人在c语言中goto语句怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”c语言中goto语句怎么使用”的疑惑有所帮助!接下来,请跟
2023-07-04

c语言goto语句怎么使用

C语言中的goto语句用于无条件地转移到程序中的标记位置。它的使用方式如下:1. 在程序中标记位置,语法为:```label:```其中,label为标记的名称,冒号表示标记的结束。2. 使用goto语句跳转到标记位置,语法为:```got
2023-08-26

Go语言中break label与goto label的区别

与其他语言一样,Go语言也支持label(标签)语法: 分别是break label和 goto label 这样使得编程时变得异常灵活,但是由于在大项目中不好控制,所以建议能不使用goto label就不要使用 break label 和
2022-06-07

c语言中goto语句的用法

c 语言中 goto 语句允许程序跳转到代码的任何位置,但由于难以维护、调试和违反结构化编程原则,推荐避免使用它。相反,建议使用更结构化的控制流程语句,如 break、continue、switch、循环和条件语句。C 语言中 goto 语
c语言中goto语句的用法
2024-05-09

php中goto语句怎么用

这篇文章主要为大家展示了“php中goto语句怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“php中goto语句怎么用”这篇文章吧。php goto语句用法如“goto a;echo Fo
2023-06-15

c语言中goto语句的用法是什么

在C语言中,goto语句用于无条件地将控制转移到程序中的标记位置。其基本语法如下:goto label;其中,label是一个标记的名称,可以在程序中的任何位置定义。使用goto语句的主要目的是在程序中实现跳转,以便在需要的时候可以直接
c语言中goto语句的用法是什么
2024-02-29

C语言goto语句如何使用

C语言的goto语句用于无条件地将控制转移到程序中的某个标记处。它可以被用来跳过一些代码块或者在程序中实现条件控制。使用goto语句的基本语法如下:```cgoto label;......label:statement;```其中,`la
2023-08-12

Go语言中break label与goto label的区别有哪些

这篇文章将为大家详细讲解有关Go语言中break label与goto label的区别有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。与其他语言一样,Go语言也支持label(标签)语法:分别是br
2023-06-14

怎么使用Java中的goto语句

这篇文章主要介绍“怎么使用Java中的goto语句”,在日常操作中,相信很多人在怎么使用Java中的goto语句问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Java中的goto语句”的疑惑有所帮助!
2023-06-25

Go语言中的:=怎么用

这篇文章主要为大家展示了“Go语言中的:=怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Go语言中的:=怎么用”这篇文章吧。1. 单变量 :=Go 语言中新增了一个特殊的运算符:=,这个运
2023-06-22

go语言中if怎么用

在go语言中,关键字if用于测试某个条件(布尔型 或逻辑型)是否成立,如果该条件成立,则会执行if后由大括号“{}”括起来的代码块,否则就忽略该代码块继续执行后续的代码,语法“if condition {...}”。if语句用于选择单分支,如果存在第二个分支,而需要配合else关键字使用;如果存在更多分支,则还需要配合“else if”关键字使用。
2023-05-14

Go语言中go build命令怎么用

这篇文章主要介绍了Go语言中go build命令怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。go build1. 用于测试编译多个包或一个main包2. build命
2023-06-25

Go语言中go install命令怎么用

小编给大家分享一下Go语言中go install命令怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!go install编译并安装代码包,对于库,会生成目标库
2023-06-25

Go语言中go fmt命令怎么用

这篇文章主要为大家展示了“Go语言中go fmt命令怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Go语言中go fmt命令怎么用”这篇文章吧。go fmt命令主要是用来帮你格式化所写好的
2023-06-25

Go语言中数组怎么用

这篇文章主要介绍Go语言中数组怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!概述固定长度,数组声明后长度便不能再修改只能存储一种特定类型元素的序列语法编号方式代码示例1直接声明var arr [3]int2ma
2023-06-25

go语言中mysql怎么使用

本篇内容介绍了“go语言中mysql怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!golang支持多种数据库1、MySQLMySQL
2023-07-04

go语言中怎么使用select

这篇文章主要介绍“go语言中怎么使用select”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“go语言中怎么使用select”文章能帮助大家解决问题。在golang语言中,select语句 就是用来
2023-06-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录