1.1 Go 语言简介
Go 是什么?
Go(又称 Golang)是 Google 于 2009 年发布的开源编程语言,由 Robert Griesemer、Rob Pike 和 Ken Thompson 设计。Go 的目标是在接近 C 语言级别性能的同时,提供现代语言的开发效率。
设计哲学
Go 的核心设计理念可以用三个词概括:简洁、高效、并发。
| 特性 | 说明 |
|---|---|
| 简洁 | 关键字仅 25 个,语法极简,没有继承、没有泛型(1.18 前)、没有异常 |
| 高效 | 编译型语言,编译速度极快,生成原生机器码 |
| 并发 | goroutine 和 channel 是语言级别的并发原语 |
| 工具链 | 自带格式化(go fmt)、测试(go test)、文档(go doc)等工具 |
| 静态类型 | 编译期类型检查,同时又有类型推断的便利 |
与其他语言的对比
| 特性 | Go | Python | Java | C |
|---|---|---|---|---|
| 编译/解释 | 编译 | 解释 | 编译+VM | 编译 |
| 并发支持 | goroutine | 线程/GIL | 线程 | 线程 |
| 垃圾回收 | ✅ | ✅ | ✅ | ❌ |
| 学习曲线 | 低 | 低 | 中 | 高 |
| 执行性能 | 高 | 低 | 中高 | 最高 |
| 部署难度 | 极低 | 中 | 中 | 高 |
Go 最大的优势之一是部署极简——编译后只有一个二进制文件,不依赖任何运行时环境。
Go 程序的基本结构
// 每个 Go 文件必须声明所属的包
package main
// import 导入需要使用的包
import (
"fmt"
)
// main 函数是程序的入口点
func main() {
fmt.Println("Hello, Go!")
}
让我们逐行解析:
-
package main— 声明这个文件属于main包。可执行程序必须有一个main包 -
import "fmt"— 导入标准库的fmt包,用于格式化输入输出 -
func main()— 程序执行的入口函数,main包中必须有一个main函数
常用命令
# 运行程序(编译 + 执行,不生成文件)
go run main.go
# 编译生成可执行文件
go build main.go
# 格式化代码(Go 有统一的代码风格)
go fmt main.go
# 查看文档
go doc fmt.Println
# 初始化模块
go mod init <module-name>
代码风格约定
Go 有一些强制性的代码风格,不遵守会编译报错:
1. 左大括号不能换行
// ✅ 正确
func main() {
fmt.Println("Hello")
}
// ❌ 错误:这会编译报错!
func main()
{
fmt.Println("Hello")
}
2. 导入的包必须使用
// ✅ 正确
import "fmt"
fmt.Println("Hello")
// ❌ 错误:导入了 "os" 但没有使用,编译会报错
import "os"
3. 声明的变量必须使用
// ✅ 正确
x := 10
fmt.Println(x)
// ❌ 错误:声明了 y 但没有使用,编译会报错
y := 20
小结
-
Go 追求简洁,语法少但表达力强
-
编译速度快,部署简单(单一二进制文件)
-
内置并发支持,非常适合网络服务开发
-
强制代码风格,团队协作效率高