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

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

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

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 50w+ 字,讲解图 2200+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 1700+ 小伙伴加入学习 ,欢迎点击围观

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