iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >go语言中goto怎么用
  • 383
分享到

go语言中goto怎么用

gotogo语言 2022-11-23 18:11:13 383人浏览 泡泡鱼
摘要

本教程操作环境:windows7系统、Go 1.18版本、Dell G3电脑。go语言中的goto语句goto 顾言思义,是跳转的意思。Go 语言的 goto 语句可以无条件地转移到程序中指定的行,通过标签进行代码间的无条件跳转,同时 go

教程操作环境: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怎么用的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: go语言中goto怎么用

本文链接: https://www.lsjlt.com/news/173555.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • go语言中goto怎么用
    本教程操作环境:windows7系统、GO 1.18版本、Dell G3电脑。go语言中的goto语句goto 顾言思义,是跳转的意思。Go 语言的 goto 语句可以无条件地转移到程序中指定的行,通过标签进行代码间的无条件跳转,同时 go...
    99+
    2022-11-23
    goto go语言
  • go语言中goto如何用
    本文小编为大家详细介绍“go语言中goto如何用”,内容详细,步骤清晰,细节处理妥当,希望这篇“go语言中goto如何用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。在go语言中,goto语句用于无条件跳转,可以...
    99+
    2023-07-04
  • c语言中goto语句怎么使用
    这篇文章主要介绍“c语言中goto语句怎么使用”,在日常操作中,相信很多人在c语言中goto语句怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”c语言中goto语句怎么使用”的疑惑有所帮助!接下来,请跟...
    99+
    2023-07-04
  • c语言goto语句怎么使用
    C语言中的goto语句用于无条件地转移到程序中的标记位置。它的使用方式如下:1. 在程序中标记位置,语法为:```label:```...
    99+
    2023-08-26
    c语言 goto
  • Go语言中break label与goto label的区别
    与其他语言一样,Go语言也支持label(标签)语法: 分别是break label和 goto label 这样使得编程时变得异常灵活,但是由于在大项目中不好控制,所以建议能...
    99+
    2022-06-07
    GO GOTO break go语言 label
  • php中goto语句怎么用
    这篇文章主要为大家展示了“php中goto语句怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“php中goto语句怎么用”这篇文章吧。php goto语句用法如“goto a;echo &#...
    99+
    2023-06-15
  • Go语言中break label与goto label的区别有哪些
    这篇文章将为大家详细讲解有关Go语言中break label与goto label的区别有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。与其他语言一样,Go语言也支持label(标签)语法:分别是br...
    99+
    2023-06-14
  • C语言goto语句如何使用
    C语言的goto语句用于无条件地将控制转移到程序中的某个标记处。它可以被用来跳过一些代码块或者在程序中实现条件控制。使用goto语句...
    99+
    2023-08-12
    C语言 goto
  • 怎么使用Java中的goto语句
    这篇文章主要介绍“怎么使用Java中的goto语句”,在日常操作中,相信很多人在怎么使用Java中的goto语句问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Java中的goto语句”的疑惑有所帮助!...
    99+
    2023-06-25
  • Go语言中的:=怎么用
    这篇文章主要为大家展示了“Go语言中的:=怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Go语言中的:=怎么用”这篇文章吧。1. 单变量 :=Go 语言中新增了一个特殊的运算符:=,这个运...
    99+
    2023-06-22
  • go语言中if怎么用
    在go语言中,关键字if用于测试某个条件(布尔型 或逻辑型)是否成立,如果该条件成立,则会执行if后由大括号“{}”括起来的代码块,否则就忽略该代码块继续执行后续的代码,语法“if condition {...}”。if语句用于选择单分支,...
    99+
    2023-05-14
    Golang go语言
  • go语言怎么调用c语言
    Go语言可以通过使用cgo工具以及一些特定的语法来调用C语言代码。 以下是调用C语言的Go代码示例: 创建一个名为 `callc....
    99+
    2023-10-27
    go语言 c语言
  • C语言goto语句简单使用详解
    简单介绍 C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。但是某些场合下goto语句还是...
    99+
    2022-11-12
  • Go语言中go fmt命令怎么用
    这篇文章主要为大家展示了“Go语言中go fmt命令怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Go语言中go fmt命令怎么用”这篇文章吧。go fmt命令主要是用来帮你格式化所写好的...
    99+
    2023-06-25
  • Go语言中go build命令怎么用
    这篇文章主要介绍了Go语言中go build命令怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。go build 用于测试编译多个包或一个main包2. build命令编...
    99+
    2023-06-25
  • Go语言中go install命令怎么用
    小编给大家分享一下Go语言中go install命令怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!go install编译并安装代码包,对于库,会生成目标库...
    99+
    2023-06-25
  • go语言中mysql怎么使用
    本篇内容介绍了“go语言中mysql怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!golang支持多种数据库MySQLMySQL是一...
    99+
    2023-07-04
  • go语言中怎么使用select
    这篇文章主要介绍“go语言中怎么使用select”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“go语言中怎么使用select”文章能帮助大家解决问题。在golang语言中,select语句...
    99+
    2023-06-30
  • Go语言中数组怎么用
    这篇文章主要介绍Go语言中数组怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!概述固定长度,数组声明后长度便不能再修改只能存储一种特定类型元素的序列语法编号方式代码示例1直接声明var arr [3]int2ma...
    99+
    2023-06-25
  • Go语言中defer语句怎么使用
    今天小编给大家分享一下Go语言中defer语句怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.在一个函数内的def...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作