From b0ceda8c880c03591bdd6d36709c138e04f3ab9d Mon Sep 17 00:00:00 2001 From: openclaw Date: Mon, 23 Mar 2026 14:15:41 +0000 Subject: [PATCH] Add Chapter 1: Introduction to Go - Environment setup and Hello World --- chapters/chapter-1-introduction.md | 330 +++++++++++++++++++++++++++++ chapters/chapter-1/go.mod | 3 + chapters/chapter-1/hello.go | 41 ++++ 3 files changed, 374 insertions(+) create mode 100644 chapters/chapter-1-introduction.md create mode 100644 chapters/chapter-1/go.mod create mode 100644 chapters/chapter-1/hello.go diff --git a/chapters/chapter-1-introduction.md b/chapters/chapter-1-introduction.md new file mode 100644 index 0000000..b7a7b3e --- /dev/null +++ b/chapters/chapter-1-introduction.md @@ -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 +``` + +#### 添加依赖 + +```bash +# 自动添加依赖(根据代码中的 import) +go mod tidy + +# 手动添加依赖 +go get +``` + +#### 查看依赖 + +```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 + +**下一章预告**:变量声明、数据类型、运算符、条件语句、循环语句 diff --git a/chapters/chapter-1/go.mod b/chapters/chapter-1/go.mod new file mode 100644 index 0000000..9ff1861 --- /dev/null +++ b/chapters/chapter-1/go.mod @@ -0,0 +1,3 @@ +module go-tutorial + +go 1.21 diff --git a/chapters/chapter-1/hello.go b/chapters/chapter-1/hello.go new file mode 100644 index 0000000..67f5021 --- /dev/null +++ b/chapters/chapter-1/hello.go @@ -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() +}