Go 基础语法

环境装好后,我们来系统过一遍 Go 的基础语法。这一章不涉及复杂概念,只讲程序"长什么样"——结构、注释、分号规则、关键字。读完你就能看懂任何 Go 代码的大致框架。

1. Go 程序的基本结构

一个可执行的 Go 程序最少包含三部分:package 声明、import 导入、func main() 入口函数。看这个例子:

package main    // 声明包名,每个 .go 文件必须在第一行声明所属包

import "fmt"     // 导入标准库 fmt(格式化输入输出)

// 主函数:程序入口,无参数无返回值
func main() {
    fmt.Println("Hello, Go!")
}
// 程序从这里开始执行,执行完 main 就结束

几个要点:

2. import 多个包

实际项目里一个文件往往要导入多个包,推荐用括号写法:

// 多个 import 用括号包起来,更整洁
import (
    "fmt"
    "os"
    "strings"
)

// 也可以每行一个
import "fmt"
import "os"

3. 注释

Go 的注释规则和 C/Java/JS 完全一致:

// 这是单行注释,双斜杠开头,到行尾结束

/* 这是多行注释,
   可以跨多行,
   用斜杠星号包裹 */

/*
   块注释常用于:
   - 文件开头的版权/说明
   - 临时禁用一大段代码
*/

// 文件开头的包注释,用块注释书写
// Package math 提供基础数学函数。
package math

注意 go doc 工具会读取以标识符名字开头的注释自动生成文档(如 // Println formats using the default formats...),所以写公共 API 时注释要紧贴代码、以标识符名开头。

4. 分号插入规则(重要!)

Go 和 C/Java 一样语句以分号结尾,但你几乎看不到分号——因为编译器会自动在行尾补分号。规则是:当一行的最后一个标记是

时,编译器会在行尾自动插入分号。这带来一个直接后果:左花括号 { 必须跟在函数/控制语句签名的同一行,不能换行,否则编译器会在上一行末尾插入分号导致报错。

// ❌ 错误写法:左花括号换行了,编译报错
func main()
{
    fmt.Println("hi")
}

// ✅ 正确写法:左花括号必须跟在函数签名行尾
func main() {
    fmt.Println("hi")
}

// ❌ 错误:return 必须和值在同一行
return
    42

// ✅ 正确:return 跟在值前面
return 42

这条规则强制了统一的代码风格——这也是为什么 Go 社区的代码"长得都一样",几乎不存在大括号位置之争。

5. 标记(Tokens)

标记是编译器识别的最小语法单元,分六大类:

// 标记(tokens)是 Go 编译器识别的最小语法单元
// 下面这行语句包含 6 个标记:
age := 20

// 标记分别是:
// age      (标识符)
// :=       (运算符:短变量声明)
// 20       (整数字面量)
// 换行     (语句分隔)

// Go 一共 25 个关键字,后面会列出
// 此外还有 ~36 个预声明标识符(int/string/len/cap/true/false 等)
// 它们不是关键字,可以重定义(但不推荐)

6. Go 的 25 个关键字

Go 只有 25 个关键字,比 Java(50 个)和 C++(90+)少得多,这是它"语法简洁"的核心原因。按用途分组记忆更容易:

完整列表(字母序):break case chan const continue default defer else fallthrough for func go goto if import interface map package range return select struct switch type var

7. 空白符与 gofmt

Go 对待空白符(空格、Tab、换行)大部分情况下是不敏感的——除了前面讲的"行尾分号插入"。为了彻底消灭"Tab vs 空格"之类的口水战,Go 官方提供了 gofmt 工具:

在终端一行命令就能格式化整个项目:gofmt -w .。VS Code 的 Go 扩展会保存时自动运行 gofmt,所以你几乎感觉不到它的存在——但所有人写出来的代码风格完全一致。

更严格的还有 goimports,它在 gofmt 基础上还会自动增删 import 语句,是 gofmt 的超集。强烈推荐启用。

小结

这一章你了解了 Go 程序的整体骨架:包声明 → 导入 → main 函数;知道了注释和分号规则;记住了 25 个关键字的分组。下一篇我们看 Go 的数据类型——这是写任何变量之前必须搞清楚的事。

← 上一篇 Go 环境安装

下一篇 Go 数据类型

✈️💬