Go语言运算符与控制结构全解:从语法到实战

小鹿同学
小鹿同学
发布时间:2026-10-15| 3人浏览过
原创

掌握Go语言的基础是理解其运算符与控制结构。本文详细梳理了算术、关系、逻辑、位、赋值及指针运算符的用法与优先级,并深入解析If判断、For循环(含Range遍历)和Switch多路分发的核心语法与常见陷阱,帮助开发者编写更健壮、地道的Go代码。

运算符详解

运算符用于将操作数组合成表达式。在Go中,基本的表达式构建如:n := i + j。Go主要包含六种运算符类别。

算术运算符

运算符含义
+加法;整数、浮点数、复数相加,或字符串拼接
-减法
*乘法
/除法
%求余;仅适用于整数类型
++自增(后自增/前自增不可作为独立语句使用)
--自减(同上,Go不支持单独的--运算作为语句,需配合变量修改)
+/-一元正/负号

注意事项: 1. % 仅支持整数,对浮点数使用会报错。 2. Go中的 i++ 和 ++i 是语句而非表达式,不能像C系列语言那样直接赋值给其他变量(如 j = i++ 是非法的)。

// 字符串拼接
str := "hello" + "world"

// 自增只能单独使用
var n int = 1
n++

关系运算符

结果为布尔值,常用于控制结构的条件判断:

运算符含义
==相等
!=不相等
<小于
>大于
<=小于或等于
>=大于或等于

逻辑运算符

同样返回布尔值,支持短路求值:

运算符含义
&&逻辑与(AND)
||逻辑或(OR)
!逻辑非(NOT),优先级最高之一

位运算符

仅适用于整数类型。Go提供了按位操作特有的按位清空运算符 &^。

运算符含义
&按位与
|按位或
^按位异或
<<左移
>>右移
&^按位清空(Mask Clear):若右边为1,则左边对应位清零
fmt.Println(2 & 1)   // 0 (0010 & 0001)
fmt.Println(2 | 1)   // 3 (0010 | 0001)
fmt.Println(2 ^ 1)   // 3 (0010 ^ 0001)
fmt.Println(1 << 1)  // 2 (0001 << 1)
fmt.Println(2 >> 1)  // 1 (0010 >> 1)
fmt.Println(23 &^ 5) // 18 (00010111 &^ 00000101 = 00010010)

赋值运算符

包括基础赋值 = 和声明赋值 :=,以及复合赋值(如 +=, -=, <<= 等)。注意 != 是关系运算符,不是赋值运算符,表格中原稿有误,此处已修正。!= 表示不等于。

指针运算符

运算符含义
&取地址
*解引用(指向的内容)

运算符优先级

当混合使用时,了解优先级至关重要。优先级从高到低:

  1. 最高:一元运算符 +, -, !, * (指针), & (取址)
  2. Level 5: *, /, %, <<, >>, &, &^
  3. Level 4: +, -, |, ^
  4. Level 3: ==, !=, <, >, <=, >=
  5. Level 2: &&
  6. Level 1: ||
  7. 最低:所有赋值运算符 (=, +=, etc.)

注: ++ 和 -- 是语句,不参与表达式优先级计算。

控制结构详解

Go语言的控制结构相对简洁,主要包括 if、for 和 switch。

If 条件判断

if 的基本结构如下,条件表达式无需括号,但代码块必须使用花括号:

if condition {
    // code
}

带初始化语句的 If:可以在条件检查前先执行初始化代码,该变量的作用域仅限于 if-else 块内:

if err := doSomething(); err != nil {
    fmt.Println("Error:", err)
}

Else/Else If 链:

if x > 10 {
    fmt.Println("Big")
} else if x == 10 {
    fmt.Println("Equal")
} else {
    fmt.Println("Small")
}

For 循环

Go只有 for 一种循环关键字,它取代了其他语言中的 while 和 do-while。

第1步:经典三要素循环

包含初始化、条件和后置语句:

for init; condition; post {
    // loop body
}

// 示例
for i := 0; i < 10; i++ {
    fmt.Println(i)
}

第2步:简化版 While 循环

省略初始化与后置语句,仅保留条件:

x := 1
for x < 20 {
    fmt.Println(x)
    x++
}

第3步:死循环

省略条件:

for {
    // infinite loop
    break // use break to exit
}

第4步:Range 遍历

用于遍历数组、切片、Map、String 和 Channel。类似 PHP 的 foreach:

a := []int{1, 2, 3}
for index, value := range a {
    fmt.Printf("Index: %d, Value: %d\n", index, value)
}

循环控制:

  • break:立即退出当前循环或 switch。
  • continue:跳过本次迭代,进入下一次。

Switch 多路分支

Go的 switch 非常强大且灵活,默认情况下每个 case 自动带有 break,除非使用 fallthrough。

第1步:标准 Switch

比较 switch 后的表达式与 case 后的值:

x := 8
switch x {
case 8:
    fmt.Println("Eight")
case 9:
    fmt.Println("Nine")
default:
    fmt.Println("Unknown")
}

第2步:Fallthrough 穿透

如果希望在匹配一个 case 后继续执行下一个 case,使用 fallthrough:

switch x {
case 8:
    fmt.Println("Eight")
    fallthrough
case 9:
    fmt.Println("Nine")
    fallthrough
case 10:
    fmt.Println("Ten")
}

上述代码将依次输出 Eight, Nine, Ten。

第3步:无标签 Switch (类似 If/Else If)

省略 switch 后的表达式,直接在 case 中写条件:

x := 10
switch {
case x >= 10:
    fmt.Println("At least 10")
case x > 20:
    fmt.Println("Greater than 20")
default:
    fmt.Println("Unknown")
}

第4步:带初始化的 Switch

同样支持局部变量初始化:

switch v := compute(); {
case v > 0:
    fmt.Println("Positive")
case v < 0:
    fmt.Println("Negative")
default:
    fmt.Println("Zero")
}

总结

Go语言的运算符设计注重清晰与安全,特别是自增自减的限制避免了复杂的表达式副作用。控制结构方面,for 的一体化设计和 switch 的自动 break 机制使得代码更加紧凑易读。理解这些基础结构是编写高效 Go 程序的关键。 以上就是Go语言运算符与控制结构详解的详细内容,更多关于Go语言基础语法与进阶操作的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。