Go语言for循环的基本语法结构
Go语言的for循环有三种常见形式,其中最常用的是带初始化、条件判断和后置语句的完整形式,标准语法结构如下:
// 完整for循环语法
for 初始化语句; 条件表达式; 后置语句 {
循环体代码
}

为什么int i := 0会导致编译错误
很多从C、Java等语言转过来的开发者,会直接写出如下代码:
package main
import "fmt"
func main() {
// 错误写法,会触发编译错误
for int i := 0; i < 5; i++ {
fmt.Println(i)
}
}
这段代码会直接报错,错误信息通常是syntax error: unexpected int, expecting {,核心原因是Go语言的变量初始化语法要求:如果在for循环的初始化部分声明新变量,不需要写变量类型。Go是静态类型语言,会根据初始化值自动推导变量类型,显式写int反而违反了语法规则。
正确的for循环初始化写法
去掉变量类型int,直接用短变量声明即可,正确写法如下:
package main
import "fmt"
func main() {
// 正确写法,Go会自动推导i为int类型
for i := 0; i < 5; i++ {
fmt.Println(i)
}
}
如果需要提前声明变量再使用,也可以把初始化语句放到循环外面,此时不需要短变量声明:
package main
import "fmt"
func main() {
var i int
// 循环内不需要再声明,直接赋值即可
for i = 0; i < 5; i++ {
fmt.Println(i)
}
}
Go语言for循环的其他常见形式
省略初始化和后置语句的条件循环
类似其他语言中的while循环,Go可以省略for循环的初始化和后置语句,只保留条件判断:
package main
import "fmt"
func main() {
i := 0
// 省略初始化和后置语句,等价于while循环
for i < 5 {
fmt.Println(i)
i++
}
}
无限循环写法
如果三个部分全部省略,就会形成无限循环,通常配合break语句使用:
package main
import "fmt"
func main() {
i := 0
// 无限循环
for {
if i >= 5 {
break
}
fmt.Println(i)
i++
}
}
遍历数组、切片、map的for range形式
Go还提供了for range语法用于遍历集合类型,不需要手动控制索引:
package main
import "fmt"
func main() {
arr := []int{1, 2, 3, 4, 5}
// 遍历切片,index是索引,value是对应的值
for index, value := range arr {
fmt.Printf("索引:%d,值:%dn", index, value)
}
}
for循环使用注意事项
- for循环的初始化语句中声明的变量,作用域仅限于当前for循环内部,循环结束后无法访问。
- 如果不需要for range返回的索引或者值,可以用下划线
_忽略,比如for _, value := range arr。 - 不要在循环条件里做复杂的函数调用,避免每次循环都执行多余的计算,影响性能。
Go语言的语法设计追求简洁,很多常见写法和传统语言有差异,遇到编译错误时优先检查是否符合Go的语法规范,而不是套用其他语言的习惯。
Go语言for循环int_i_:=_0编译错误语法规范修改时间:2026-06-17 14:24:28