跳到主要内容

Basic Syntax(基础语法)

本篇是路线总览,不替代后续专题。读完后应能读懂一个包含包、声明、分支、循环、函数和错误返回的简单 Go 程序;遇到细节时,沿着文中的专题链接继续学习。

最小 Go 程序

可执行程序必须属于 main 包,并提供无参数、无返回值的 main 函数:

package main

import "fmt"

func main() {
fmt.Println("Hello, Go!")
}

保存为 main.go 后,在文件所在目录运行:

go run main.go

源文件通常不手写分号。词法分析器会按行末规则插入分号,因此函数或控制结构的左花括号必须与声明位于同一行。格式交给 gofmt

gofmt -w main.go

程序结构、包名和导入路径的完整解释见 Package(包)Import / Export(导入与导出)

声明、类型与零值

Go 是静态类型语言。变量必须有确定类型,声明但未初始化时取得该类型的零值:

package main

import "fmt"

func main() {
var count int
var title string
active := true

fmt.Printf("%d %q %t\n", count, title, active)
}

函数内部可以使用 := 短变量声明;包级声明使用 varconsttype:= 左侧必须至少包含一个当前作用域中的新变量,普通赋值则使用 =。详细规则见 Variables(变量)Constants(常量)Data Types(数据类型)

常见基础类型包括 bool、有符号和无符号整数、浮点数、复数和 string。Go 不会在不同命名数值类型之间隐式转换,类型转换必须显式写成 T(value);转换本身不提供溢出检查。

运算符与控制流

整数除法向零截断,条件表达式必须是 bool,Go 没有 while 和三元条件运算符:

package main

import "fmt"

func classify(score int) string {
switch {
case score >= 90:
return "excellent"
case score >= 60:
return "passed"
default:
return "failed"
}
}

func main() {
for score := 55; score <= 95; score += 20 {
fmt.Println(score, classify(score))
}
}

Go 只有 for 循环关键字,可以写成三段式、条件循环或无限循环。range 的返回值取决于被遍历的类型,映射顺序没有语言保证。switch 默认只执行第一个匹配分支,不会自动贯穿。完整边界见 Operator(运算符)Conditional Control(条件控制)Loop Control(循环控制)

函数与错误返回

参数类型写在参数名之后,返回类型写在参数列表之后。函数可以返回多个值,错误通常作为最后一个返回值并由调用方显式检查:

package main

import (
"errors"
"fmt"
)

func divide(dividend, divisor int) (int, error) {
if divisor == 0 {
return 0, errors.New("divisor must not be zero")
}
return dividend / divisor, nil
}

func main() {
result, err := divide(10, 2)
if err != nil {
fmt.Println("divide:", err)
return
}
fmt.Println(result)
}

函数类型、闭包、递归、defer 和完整错误处理位于 Function(函数)Error(错误处理)

前端迁移时最容易带错的规则

对比项GoTypeScript/JavaScript
条件必须是 bool支持 truthy/falsy 转换
循环统一使用 for还有 whiledo...while
错误通常显式返回并逐层处理常见 throw 或 Promise rejection
导出包级名称、字段和方法首字母大小写决定使用 export
变量始终有静态类型和零值运行时值可为 undefined

这些对比只用于建立迁移线索,不能把 Go 的接口、切片、nil 或错误值直接等同于前端概念。

常见错误

  • 在包级使用 :=,或在同一作用域中没有新变量时继续使用 :=
  • 把数字、字符串或 nil 直接写成条件。
  • 把数组、切片和映射都理解成“对象引用”,忽略复制和共享规则。
  • 忽略多返回值中的 error,或在每一层重复记录同一个错误。
  • 依赖映射遍历顺序,或在循环中创建没有退出路径的无限循环。

练习与验证

使用切片保存多个成绩,编写返回 (string, error) 的分类函数,拒绝超出 0..100 的输入,并为边界值、非法值和正常值编写表格驱动测试。执行:

gofmt -w .
go test ./...
go run .

小结

  • Go 程序由包组织,main 包中的 main 函数是可执行入口。
  • 变量有静态类型和零值,短变量声明只在函数内使用。
  • 条件必须是 boolfor 是唯一循环关键字,switch 默认不贯穿。
  • 函数可以返回多个值,错误通常显式传播和检查。
  • 细节应继续阅读本目录专题,再进入函数、接口、错误、并发和测试等进阶文档。