Go 语言 goto 语句(代码跳转)

更新时间 2022-03-31 15:02:35

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡 / 赠书活动

目前, 星球 内第一个项目:全栈前后端分离博客项目,演示地址:http://116.62.199.48/, 1.0 版本已经更新完毕,正在更新 2.0 版本。采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 187 小节,累计 29w+ 字,讲解图:1263 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 720+ 小伙伴加入,欢迎点击围观

Go 语言 中,goto 语句通过标签实现代码间的跳转。它通常会被使用在快速跳出循环 、避免定义重复代码等。

一、使用 goto 跳出循环

package main

import "fmt"

func main()  {
	// 外循环
	for i := 0; i < 10; i++ {
		// 内循环
		for j := 0; j < 10; j++ {
			// 当 j 等于 2 时,跳转到标签 breakHere 那里
			if j == 2 {
				// 跳转标签
				goto breakHere
			}
		}
	}

	// 手动返回,防止执行后面的标签
	return

	// 定义一个标签
	breakHere:
		fmt.Println("跳到这里 ...")
}

代码输出:

跳到这里 ...

图示:

go语言goto语句跳转代码示例go语言goto语句跳转代码示例

二、避免定义重复代码

在实际的编码中,经常会定义一些重复性的代码,如下:

err := firstCheckError()
if err != nil {
  // 打印错误,并退出
  fmt.Println(err)
  exit()
  return
}

err := secondCheckError()
if err != nil {
  // 打印错误,并退出
  fmt.Println(err)
  exit()
  return
}

上面的这段明显有重复代码,我们可以 goto 定义标签来使代码变的更加优雅一点:

err := firstCheckError()
if err != nil {
  goto onExit
  return
}

err := secondCheckError()
if err != nil {
  goto onExit
  return
}

return

onExit:
  fmt.Println(err)
  exit()