Go语言中循环与判断的语法、用法与最佳实践

 更新时间:2026年04月10日 08:35:03   作者:XMYX-0  
本文详细介绍了Go语言的if条件判断、for循环和switch语句的用法,包括基本语法、高级用法和实战技巧,并指出了一些常见的错误和最佳实践,通过本文,读者可以掌握Go语言中的循环和条件判断的核心用法,需要的朋友可以参考下

在 Go(Golang)中,循环和条件判断设计得非常简洁,没有冗余语法,但却足够强大。相比其他语言(如 Java、Python),Go 在这方面有不少“反直觉但优雅”的设计。

本文将带你系统掌握:

  • Go 的 if 条件判断
  • Go 的 for 循环(唯一循环关键字)
  • switch 的高级用法
  • 实战技巧与常见坑

条件判断:if

基本语法

if 条件 {
    // 执行代码
}

示例:

package main

import "fmt"

func main() {
	age := 30
	if age >= 18 {
		fmt.Println("成年人")
	}
}

明显30大于18
输出:

成年人

if-else

if 条件 {
    // 执行
} else {
    // 执行
}
package main

import "fmt"

func main() {
	score := 90
	if score >= 60 {
		fmt.Println("及格")
	} else {
		fmt.Println("不及格")
	}
}

输出:

及格

if-else if-else

package main

import "fmt"

func main() {
	score := 90
	if score >= 90 {
		fmt.Println("优秀")
	} else if score >= 60 {
		fmt.Println("及格")
	} else {
		fmt.Println("不及格")
	}
}

输出:

优秀

if 的“增强写法”(非常重要)

Go 支持在 if 中写初始化语句:

if 变量 := 表达式; 条件 {
    // 使用变量
}

示例:

package main

func main() {
	if num := 10; num > 5 {
		println("大于5")
	}
}

输出:

大于5

特点:

  • num 只在 if 作用域内有效
  • 常用于错误处理

常见错误(新手必踩)

错误写法(Go 不允许):

if (age > 18) {  // ❌ Go 不需要括号
}

正确写法:

if age > 18 {
}

循环:for(Go 只有这一种循环)

Go 没有 whiledo-while,全部用 for 实现。

标准 for 循环

for 初始化; 条件; 递增 {
    // 循环体
}

示例:

package main

import "fmt"

func main() {
	for i := 0; i < 5; i++ {
		fmt.Println(i)
	}
}

输出:

0
1
2
3
4

类 while 循环

for 条件 {
    // 循环体
}

示例:

package main

import "fmt"

func main() {
	i := 0
	for i < 5 {
		fmt.Println(i)
		i++
	}
}

输出:

0
1
2
3
4

等价于其他语言的 while

无限循环

for {
    println("死循环")
}

常用于:

  • 服务监听
  • goroutine 任务循环

break 和 continue

break:跳出循环

package main

import "fmt"

func main() {
	// 跳出循环
	for i := 0; i < 10; i++ {
		if i == 5 {
			break
		}
		fmt.Println(i)
	}
}

输出:

0
1
2
3
4

continue:跳过当前循环

package main

func main() {
	for i := 0; i < 5; i++ {
		if i == 2 {
			continue
		}
		println(i)
	}
}

输出:

0
1
3
4

for-range(超常用)

用于遍历:

  • 数组
  • 切片
  • map
  • 字符串

遍历切片

package main

import "fmt"

func main() {
	num := []int{1, 2, 3, 4, 5}
	for key, value := range num {
		fmt.Println(key, value)
	}
}

输出:

0 1
1 2
2 3
3 4
4 5

忽略变量

package main

import "fmt"

func main() {
	num := []int{1, 2, 3, 4, 5}
	for _, value := range num {
		fmt.Println(value)
	}
}

输出:

1
2
3
4
5

遍历 map

package main

func main() {
	m := map[string]int{"a": 1, "b": 2}
	for key, value := range m {
		println(key, value)
	}
}

输出:

a 1
b 2

遍历字符串(Unicode 注意)

package main

import "fmt"

func main() {
	str := "你好Golang!"
	for k, v := range str {
		fmt.Println(k, v)
	}
}

输出:

0 20320
3 22909
6 71
7 111
8 108
9 97
10 110
11 103
12 33

注意:

  • v 是 Unicode(rune)
  • 不是 byte

条件分支:switch(比你想的更强)

基本用法

package main

import "fmt"

func main() {
	day := 3

	switch day {
	case 1:
		fmt.Println("周一")
	case 2:
		fmt.Println("周二")
	default:
		fmt.Println("其他")
	}
}

输出:

其他

自动 break(重点)

Go 的 switch 默认自带 break!

不需要写:

break
package main

import "fmt"

func main() {
	day := 3

	switch {
	case day >= 1:
		fmt.Println("周一")
	case day >= 2:
		fmt.Println("周二")
	case day >= 3:
		fmt.Println("周三")
	default:
		fmt.Println("其他")
	}
}

输出:

周一

多条件匹配

package main

import "fmt"

func main() {
	day := 1
	switch day {
	case 1, 2, 3:
		fmt.Println("工作日")
	case 6, 7:
		fmt.Println("周末")
	}
}

输出:

工作日

无表达式 switch(非常强)

package main

import "fmt"

func main() {
	score := 85

	switch {
	case score >= 90:
		fmt.Println("优秀")
	case score >= 60:
		fmt.Println("及格")
	default:
		fmt.Println("不及格")
	}
}

输出:

及格

相当于 if-else 的高级版

fallthrough(慎用)

Go 的 fallthrough 是“强制继续执行下一个 case”,不会再判断条件!

package main

import "fmt"

func main() {
	score := 85

	switch {
	case score >= 90:
		fmt.Println("优秀")
		fallthrough
	case score >= 60:
		fmt.Println("及格")
		fallthrough
	default:
		fmt.Println("不及格")
	}
}

输出:

及格
不及格

实战案例

打印九九乘法表

package main

import "fmt"

func main() {
	for i := 1; i <= 9; i++ {
		for j := 1; j <= 9; j++ {
			fmt.Printf("%d*%d=%d\t", j, i, j*i)
		}
		fmt.Println()
	}
}

输出:

1*1=1	2*1=2	3*1=3	4*1=4	5*1=5	6*1=6	7*1=7	8*1=8	9*1=9	
1*2=2	2*2=4	3*2=6	4*2=8	5*2=10	6*2=12	7*2=14	8*2=16	9*2=18	
1*3=3	2*3=6	3*3=9	4*3=12	5*3=15	6*3=18	7*3=21	8*3=24	9*3=27	
1*4=4	2*4=8	3*4=12	4*4=16	5*4=20	6*4=24	7*4=28	8*4=32	9*4=36	
1*5=5	2*5=10	3*5=15	4*5=20	5*5=25	6*5=30	7*5=35	8*5=40	9*5=45	
1*6=6	2*6=12	3*6=18	4*6=24	5*6=30	6*6=36	7*6=42	8*6=48	9*6=54	
1*7=7	2*7=14	3*7=21	4*7=28	5*7=35	6*7=42	7*7=49	8*7=56	9*7=63	
1*8=8	2*8=16	3*8=24	4*8=32	5*8=40	6*8=48	7*8=56	8*8=64	9*8=72	
1*9=9	2*9=18	3*9=27	4*9=36	5*9=45	6*9=54	7*9=63	8*9=72	9*9=81

查找数组中的某个值

package main

import "fmt"

func main() {
	nums := []int{1, 2, 3, 4, 5}
	target := 3

	fount := false
	for _, v := range nums {
		if v == target {
			fount = true
			break
		}
	}
	if fount {
		fmt.Println("yes")
	} else {
		fmt.Println("no")
	}
}

输出:

yes

最佳实践总结(面试常问)

优先使用 for-range

✔ 简洁
✔ 不容易出错

if 初始化语句要熟练

package main

import "fmt"

func main() {
	// 错误处理
	doSomething := func() error {
		return fmt.Errorf("出错1")
	}
	fmt.Println(doSomething())
	if err := doSomething(); err != nil {
		fmt.Println("出错2")
	}
}
出错1
出错2

Go 标准写法

switch 优于多层 if

✔ 更清晰
✔ 更易维护

避免死循环

for {
    // 一定要有退出条件!
}

总结

Go 的循环与判断设计哲学:

简洁 > 花哨
一种结构解决多种问题

核心记住:

  • if:支持初始化语句
  • for:唯一循环关键字(代替 while)
  • range:遍历神器
  • switch:比 if 更强大

以上就是Go语言中循环与判断的语法、用法与最佳实践的详细内容,更多关于Go循环与判断的资料请关注脚本之家其它相关文章!

相关文章

  • Golang slice切片操作之切片的追加、删除、插入等

    Golang slice切片操作之切片的追加、删除、插入等

    这篇文章主要介绍了Golang slice切片操作之切片的追加、删除、插入等,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • GoLang基础学习之go test测试

    GoLang基础学习之go test测试

    相信每位编程开发者们应该都知道,Golang作为一门标榜工程化的语言,提供了非常简便、实用的编写单元测试的能力,下面这篇文章主要给大家介绍了关于GoLang基础学习之go test测试的相关资料,需要的朋友可以参考下
    2022-08-08
  • golang实现基于channel的通用连接池详解

    golang实现基于channel的通用连接池详解

    这篇文章主要给大家介绍了关于golang实现基于channel的通用连接池的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-02-02
  • Go 常量基础概念(声明更改只读)

    Go 常量基础概念(声明更改只读)

    这篇文章主要为大家介绍了Go常量基础概念包括常量的声明更改只读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • 这些关于Go中interface{}的注意事项你都了解吗

    这些关于Go中interface{}的注意事项你都了解吗

    这篇文章主要为大家详细介绍了学习Go语言时需要了解的interface{}注意事项,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下
    2023-03-03
  • 初步解读Golang中的接口相关编写方法

    初步解读Golang中的接口相关编写方法

    这篇文章主要介绍了Golang中的接口相关编写方法,是Go语言入门学习中的基础知识,需要的朋友可以参考下
    2015-11-11
  • go语言更高精度的Sleep实例解析

    go语言更高精度的Sleep实例解析

    这篇文章主要为大家介绍了go语言更高精度的Sleep实例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • 在Gin框架中正确删除Cookie的操作指南

    在Gin框架中正确删除Cookie的操作指南

    在现代Web开发中,Cookie管理是构建用户友好应用的关键环节,Gin作为Go语言中最受欢迎的Web框架之一,提供了简洁而强大的Cookie处理机制,本文将深入探讨如何在Gin框架中正确删除Cookie,需要的朋友可以参考下
    2025-08-08
  • Go环境变量配置,及GOROOT、GOPATH的区别小结

    Go环境变量配置,及GOROOT、GOPATH的区别小结

    本文主要介绍了Go环境变量配置,及GOROOT、GOPATH的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-09-09
  • go语言中嵌套结构体的实现

    go语言中嵌套结构体的实现

    在Go语言中,嵌套结构体可定义为一个结构体内包含另一个结构体,嵌套可以是值嵌套或指针嵌套,两者在内存分配和修改影响上有显著区别,本文就来详细的介绍一下,感兴趣的可以了解一下
    2024-09-09

最新评论