Add Chapter 1: Introduction to Go - Environment setup and Hello World
This commit is contained in:
330
chapters/chapter-1-introduction.md
Normal file
330
chapters/chapter-1-introduction.md
Normal file
@@ -0,0 +1,330 @@
|
||||
# 第一章:初识 Go —— 环境搭建与 Hello World
|
||||
|
||||
## 1.1 为什么选择 Go 语言?
|
||||
|
||||
在编程语言的浩瀚星空中,Go 语言(Golang)如同一颗璀璨的新星,自 2009 年由 Google 推出以来,迅速吸引了全球开发者的目光。那么,为什么 Go 语言能在众多编程语言中脱颖而出?
|
||||
|
||||
### 1.1.1 Go 语言的设计哲学
|
||||
|
||||
Go 语言的设计团队由 Robert Griesemer、Rob Pike 和 Ken Thompson 三位传奇人物组成。Ken Thompson 更是 Unix 操作系统的创始人之一,B 语言的作者。他们在设计 Go 时遵循了以下核心原则:
|
||||
|
||||
1. **简洁性**:Go 语言语法简洁,只有 25 个关键字(相比之下,C++ 有 63 个,Java 有 50 个)。这种简洁性使得代码易于阅读和维护。
|
||||
|
||||
2. **高效性**:Go 是编译型语言,编译后的二进制文件可以直接运行,无需虚拟机。同时,Go 编译器非常智能,编译速度极快。
|
||||
|
||||
3. **并发原生支持**:Go 语言内置了 Goroutine 和 Channel 机制,让并发编程变得简单而高效。这是 Go 语言最核心的竞争优势。
|
||||
|
||||
4. **垃圾回收**:虽然 Go 是编译型语言,但它自动管理内存,拥有高效的垃圾回收机制,开发者无需手动管理内存。
|
||||
|
||||
5. **静态类型**:Go 是静态类型语言,在编译时就能发现大部分类型错误,提高了代码的可靠性。
|
||||
|
||||
### 1.1.2 Go 语言的应用场景
|
||||
|
||||
Go 语言在以下领域表现尤为出色:
|
||||
|
||||
- **云原生与容器技术**:Docker、Kubernetes 等云原生基础设施都是用 Go 编写的
|
||||
- **微服务架构**:Go 的轻量级和高性能使其成为微服务开发的理想选择
|
||||
- **网络编程**:Go 的标准库提供了强大的网络编程能力
|
||||
- **命令行工具**:Go 编译后的单二进制文件便于分发,适合开发 CLI 工具
|
||||
- **区块链**:许多区块链项目(如 Ethereum、Hyperledger)使用 Go 开发
|
||||
|
||||
## 1.2 安装 Go 环境
|
||||
|
||||
### 1.2.1 下载 Go
|
||||
|
||||
访问 Go 官方网站:https://go.dev/dl/
|
||||
|
||||
根据操作系统选择对应的安装包:
|
||||
|
||||
- **Windows**:下载 `.msi` 安装包
|
||||
- **macOS**:下载 `.pkg` 安装包
|
||||
- **Linux**:下载 `.tar.gz` 压缩包
|
||||
|
||||
### 1.2.2 Windows 安装步骤
|
||||
|
||||
1. 双击下载的 `.msi` 文件
|
||||
2. 接受许可协议
|
||||
3. 选择安装路径(默认为 `C:\Go`)
|
||||
4. 完成安装后,系统会自动配置环境变量
|
||||
|
||||
验证安装:
|
||||
```powershell
|
||||
go version
|
||||
```
|
||||
|
||||
### 1.2.3 macOS 安装步骤
|
||||
|
||||
1. 双击下载的 `.pkg` 文件
|
||||
2. 按照安装向导完成安装
|
||||
3. 安装路径默认为 `/usr/local/go`
|
||||
|
||||
验证安装:
|
||||
```bash
|
||||
go version
|
||||
```
|
||||
|
||||
### 1.2.4 Linux 安装步骤
|
||||
|
||||
```bash
|
||||
# 下载并解压
|
||||
wget https://go.dev/dl/go1.21.0.linux-amd64.tar.gz
|
||||
sudo tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz
|
||||
|
||||
# 配置环境变量
|
||||
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
|
||||
source ~/.bashrc
|
||||
|
||||
# 验证安装
|
||||
go version
|
||||
```
|
||||
|
||||
### 1.2.5 配置 Go 环境变量
|
||||
|
||||
无论使用哪个操作系统,都需要配置以下环境变量:
|
||||
|
||||
```bash
|
||||
# 设置 GOPATH(工作目录)
|
||||
export GOPATH=$HOME/go
|
||||
|
||||
# 将 Go 二进制文件添加到 PATH
|
||||
export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
|
||||
|
||||
# 设置 Go 模块代理(国内用户推荐)
|
||||
export GOPROXY=https://goproxy.cn,direct
|
||||
```
|
||||
|
||||
将上述配置添加到 `~/.bashrc` 或 `~/.zshrc` 文件中,然后执行 `source ~/.bashrc` 使配置生效。
|
||||
|
||||
### 1.2.6 验证安装成功
|
||||
|
||||
运行以下命令验证 Go 环境是否正确配置:
|
||||
|
||||
```bash
|
||||
# 检查 Go 版本
|
||||
go version
|
||||
|
||||
# 检查 Go 路径
|
||||
go env GOROOT
|
||||
go env GOPATH
|
||||
|
||||
# 检查 Go 代理配置
|
||||
go env GOPROXY
|
||||
```
|
||||
|
||||
## 1.3 开发工具准备
|
||||
|
||||
### 1.3.1 推荐编辑器
|
||||
|
||||
1. **Visual Studio Code(推荐)**
|
||||
- 免费、开源、跨平台
|
||||
- 强大的 Go 插件支持
|
||||
- 丰富的生态系统
|
||||
|
||||
2. **GoLand**
|
||||
- JetBrains 出品的专业 Go IDE
|
||||
- 功能强大,但需要付费
|
||||
- 适合大型项目开发
|
||||
|
||||
3. **Vim/Neovim**
|
||||
- 适合喜欢命令行操作的开发者
|
||||
- 需要配置插件(如 vim-go)
|
||||
|
||||
### 1.3.2 VS Code 配置 Go 开发环境
|
||||
|
||||
1. 安装 VS Code:https://code.visualstudio.com/
|
||||
|
||||
2. 安装 Go 插件:
|
||||
- 打开 VS Code
|
||||
- 点击左侧扩展图标(或按 `Ctrl+Shift+X`)
|
||||
- 搜索 "Go"
|
||||
- 安装由 "Go Team at Google" 开发的官方插件
|
||||
|
||||
3. 安装 Go 工具链:
|
||||
```bash
|
||||
# VS Code 会提示安装必要的工具,点击 "Install All" 即可
|
||||
# 或者手动安装
|
||||
go install golang.org/x/tools/gopls@latest
|
||||
go install github.com/go-delve/delve/cmd/dlv@latest
|
||||
```
|
||||
|
||||
## 1.4 第一个 Go 程序:Hello World
|
||||
|
||||
### 1.4.1 创建项目目录
|
||||
|
||||
```bash
|
||||
# 创建项目目录
|
||||
mkdir -p $GOPATH/src/github.com/yourusername/go-tutorial
|
||||
cd $GOPATH/src/github.com/yourusername/go-tutorial
|
||||
|
||||
# 初始化 Go 模块(Go 1.11+)
|
||||
go mod init go-tutorial
|
||||
```
|
||||
|
||||
### 1.4.2 编写 Hello World 代码
|
||||
|
||||
创建文件 `hello.go`:
|
||||
|
||||
```go
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
fmt.Println("Hello, World!")
|
||||
}
|
||||
```
|
||||
|
||||
代码解析:
|
||||
- `package main`:声明包名,Go 程序必须有且只能有一个 main 包
|
||||
- `import "fmt"`:导入 fmt 包,用于格式化输入输出
|
||||
- `func main()`:主函数,程序入口
|
||||
- `fmt.Println()`:打印字符串并换行
|
||||
|
||||
### 1.4.3 运行程序
|
||||
|
||||
```bash
|
||||
# 直接运行
|
||||
go run hello.go
|
||||
|
||||
# 编译后运行
|
||||
go build hello.go
|
||||
./hello
|
||||
|
||||
# 或者使用 go run 直接运行(推荐)
|
||||
go run hello.go
|
||||
```
|
||||
|
||||
输出:
|
||||
```
|
||||
Hello, World!
|
||||
```
|
||||
|
||||
### 1.4.4 代码格式化
|
||||
|
||||
Go 语言强制要求代码格式统一,使用 `gofmt` 工具:
|
||||
|
||||
```bash
|
||||
# 格式化代码
|
||||
gofmt -w hello.go
|
||||
|
||||
# 或者在 VS Code 中保存时自动格式化
|
||||
# 设置 -> 搜索 "format on save" -> 勾选
|
||||
```
|
||||
|
||||
### 1.4.5 代码检查
|
||||
|
||||
使用 `go vet` 检查代码中的潜在问题:
|
||||
|
||||
```bash
|
||||
go vet hello.go
|
||||
```
|
||||
|
||||
## 1.5 Go 工作模式:GOPATH vs Go Modules
|
||||
|
||||
### 1.5.1 GOPATH 模式(传统方式)
|
||||
|
||||
在 Go 1.11 之前,Go 使用 GOPATH 模式管理依赖:
|
||||
|
||||
- 所有代码必须放在 `$GOPATH/src` 目录下
|
||||
- 依赖管理手动进行
|
||||
- 不适合多版本管理
|
||||
|
||||
### 1.5.2 Go Modules 模式(推荐)
|
||||
|
||||
Go 1.11+ 引入了 Go Modules,成为官方推荐的依赖管理方式:
|
||||
|
||||
- 项目独立管理依赖
|
||||
- 支持多版本共存
|
||||
- 无需特定目录结构
|
||||
|
||||
#### 初始化模块
|
||||
|
||||
```bash
|
||||
# 在项目根目录
|
||||
go mod init <module-name>
|
||||
```
|
||||
|
||||
#### 添加依赖
|
||||
|
||||
```bash
|
||||
# 自动添加依赖(根据代码中的 import)
|
||||
go mod tidy
|
||||
|
||||
# 手动添加依赖
|
||||
go get <package-name>
|
||||
```
|
||||
|
||||
#### 查看依赖
|
||||
|
||||
```bash
|
||||
# 查看依赖树
|
||||
go mod graph
|
||||
|
||||
# 查看依赖详情
|
||||
go list -m all
|
||||
```
|
||||
|
||||
## 1.6 常见错误与解决方案
|
||||
|
||||
### 1.6.1 命令不存在
|
||||
|
||||
**错误**:`command not found: go`
|
||||
|
||||
**解决**:
|
||||
1. 检查 Go 是否正确安装
|
||||
2. 检查 PATH 环境变量是否包含 Go 的 bin 目录
|
||||
3. 重新加载环境变量:`source ~/.bashrc`
|
||||
|
||||
### 1.6.2 权限问题
|
||||
|
||||
**错误**:`permission denied`
|
||||
|
||||
**解决**:
|
||||
```bash
|
||||
# 修改 GOPATH 目录权限
|
||||
chmod -R 755 $GOPATH
|
||||
|
||||
# 或者使用 sudo(不推荐)
|
||||
sudo go install ...
|
||||
```
|
||||
|
||||
### 1.6.3 代理问题
|
||||
|
||||
**错误**:`cannot find module` 或下载速度慢
|
||||
|
||||
**解决**:
|
||||
```bash
|
||||
# 设置 Go 代理
|
||||
export GOPROXY=https://goproxy.cn,direct
|
||||
export GOSUMDB=sum.golang.org
|
||||
|
||||
# 永久生效,添加到 ~/.bashrc
|
||||
```
|
||||
|
||||
## 1.7 本章小结
|
||||
|
||||
通过本章学习,我们了解了:
|
||||
|
||||
1. **Go 语言的优势**:简洁、高效、并发友好
|
||||
2. **环境搭建**:安装 Go、配置环境变量、选择编辑器
|
||||
3. **第一个程序**:编写、运行、格式化 Hello World
|
||||
4. **依赖管理**:Go Modules 的基本使用
|
||||
5. **常见问题**:环境配置、权限、代理问题的解决方案
|
||||
|
||||
## 1.8 课后练习
|
||||
|
||||
1. **环境配置**:在你的电脑上成功安装并配置 Go 环境
|
||||
2. **Hello World**:编写并运行你的第一个 Go 程序
|
||||
3. **修改代码**:将 "Hello, World!" 改为 "Hello, [你的名字]!"
|
||||
4. **多行输出**:使用 `fmt.Println` 输出多行文本
|
||||
5. **格式化检查**:使用 `gofmt` 和 `go vet` 检查你的代码
|
||||
|
||||
## 1.9 下一步
|
||||
|
||||
完成本章后,你将进入第二章:**Go 基础语法**,学习变量、数据类型、流程控制等核心概念。
|
||||
|
||||
---
|
||||
|
||||
**代码仓库位置**:https://giter.top/openclaw/test/tree/main/chapters/chapter-1
|
||||
|
||||
**下一章预告**:变量声明、数据类型、运算符、条件语句、循环语句
|
||||
3
chapters/chapter-1/go.mod
Normal file
3
chapters/chapter-1/go.mod
Normal file
@@ -0,0 +1,3 @@
|
||||
module go-tutorial
|
||||
|
||||
go 1.21
|
||||
41
chapters/chapter-1/hello.go
Normal file
41
chapters/chapter-1/hello.go
Normal file
@@ -0,0 +1,41 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
// 1. 基础 Hello World
|
||||
fmt.Println("Hello, World!")
|
||||
|
||||
// 2. 多行输出
|
||||
fmt.Println("这是第一行")
|
||||
fmt.Println("这是第二行")
|
||||
fmt.Println("这是第三行")
|
||||
|
||||
// 3. 格式化输出
|
||||
name := "思语"
|
||||
age := 25
|
||||
fmt.Printf("你好,我是 %s,今年 %d 岁!\n", name, age)
|
||||
|
||||
// 4. 简单计算
|
||||
a := 10
|
||||
b := 20
|
||||
fmt.Printf("%d + %d = %d\n", a, b, a+b)
|
||||
fmt.Printf("%d * %d = %d\n", a, b, a*b)
|
||||
|
||||
// 5. 条件判断示例
|
||||
score := 85
|
||||
if score >= 90 {
|
||||
fmt.Println("优秀!")
|
||||
} else if score >= 80 {
|
||||
fmt.Println("良好!")
|
||||
} else {
|
||||
fmt.Println("继续努力!")
|
||||
}
|
||||
|
||||
// 6. 循环示例
|
||||
fmt.Println("Counting from 1 to 5:")
|
||||
for i := 1; i <= 5; i++ {
|
||||
fmt.Printf("%d ", i)
|
||||
}
|
||||
fmt.Println()
|
||||
}
|
||||
Reference in New Issue
Block a user