Skip to content

Go 基本语法

本章介绍 Go 程序的基本组成部分。

Go 程序由词法单元(Tokens)组成。词法单元可以是关键字、标识符、常量、字符串字面量或符号。考虑以下 Go 语句:

package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}

这个程序使用了几个词法单元:

Keywords: package, import, func
Identifiers: main, fmt, Println
String Literal: "Hello, World!"
Symbols: ., (, )

在 Go 中,换行符通常充当语句终止符。与 C 或 Java 等语言不同,你通常不需要在每个语句末尾放置分号(;)。Go 编译器会根据词法规则自动插入分号。

例如,这是两个独立的语句:

fmt.Println("Hello, World!")
fmt.Println("Learning Go syntax!")

但是,如果你想在一行中写多条语句,则必须用分号分隔它们:

fmt.Print("First"); fmt.Print("Second") // Semicolon required here

注释是编译器忽略的解释性文本。Go 支持两种类型的注释:

  1. 单行注释:以 // 开头并持续到行尾。
// This is a single-line comment
var message = "Hello" // Comment after code
  1. 多行注释:以 /* 开头并以 */ 结束。它们可以跨越多行。
/*
This is a multi-line comment.
It can span several lines.
*/

注释不能嵌套。它们也不影响字符串或字符字面量的解释。

提示:使用以声明项名称为前缀的注释(例如,// User represents a user 或 /* Package config handles configuration */),紧跟在 package、类型、函数或变量声明之前,可以使用 go doc 工具生成文档。这些被称为文档注释(doc comments)。

标识符是用于识别变量、函数、类型、常量等的名称。标识符的规则:

  • 必须以字母 (A-Z, a-z) 或下划线 (_) 开头。
  • 后面可以跟任意数量的字母、数字 (0-9) 或下划线。
  • 不能使用 @, $, % 等标点符号。
  • 区分大小写 (userAge 和 UserAge 是不同的)。

有效标识符的示例:

userService _tempVar isValid MAX_RETRIES piValue

可见性(导出 vs 未导出): 在 Go 中有一个重要的约定,即以大写字母开头的标识符是导出(exported)的(可以被其他 package 公开访问)。以小写字母或下划线开头的标识符是未导出(unexported)的(仅限于其定义的 package 内部使用)。

var InternalCounter int // Unexported (private to this package)
const ExportedConstant = 3.14 // Exported (public)

关键字是 Go 语言中具有特殊含义的保留字。它们不能用作标识符。以下是 Go 的关键字列表:

breakdefaultfuncinterfaceselect
casedefergomapstruct
chanelsegotopackageswitch
constfallthroughifrangetype
continueforimportreturnvar

空白字符指空格、制表符和换行符。Go 使用空白字符来分隔词法单元。空行(仅包含空白字符和可能的注释)会被编译器忽略。

在此语句中,var、age 和 int 之间必须有空白字符:

var age int

在此语句中,等号 = 和加号 + 周围的空白字符是可选的,但可以提高可读性:

total = items + tax // Calculate the total

Go 最佳实践: 使用 gofmt 工具(或 go fmt)根据 Go 标准约定自动格式化你的代码。大多数 Go 开发环境都集成了这个工具,以确保代码风格和空白字符的一致性。