Go:从终端到第一个程序
这条路线不要求学过其他语言。你将先写小程序,再实现文件任务工具,最后运行带学习记录的 API。每章先做练习,再展开参考解法;已掌握基础可以从 Go 技术页选择复习路线。
教学版本 Go 1.27.2,核对日期 2026-10-17。历史验证记录包含 Windows amd64 与 Ubuntu 26.04.1 amd64(WSL2)的示例运行;本轮仅全文静态复核,未重新执行示例;macOS arm64 仅保留平台说明,本项目不执行平台运行验证。WSL 是 Linux 环境,不等于 Windows 原生执行。本站不把以下安装说明当成已经执行过三平台安装的证据。
安装与 go version
从 Go 官方下载页 选择 1.27.2 和自己的系统、处理器架构。amd64 对应常见 Intel/AMD 64 位机器,arm64 对应 Apple Silicon 等 ARM 64 位机器;文件扩展名不是架构。安装前关闭旧终端,装完再新开终端,让 PATH 生效。PATH 是系统查找 go 可执行文件的一组目录。
| 系统与终端 | 操作 | 检查 |
|---|---|---|
| Windows / PowerShell | 运行 amd64 MSI 安装包,接受安装目录或记录自选目录 | Get-Command go,go version |
| macOS / Zsh(平台说明) | Apple Silicon 选择 arm64 PKG,按安装器操作 | command -v go,go version |
| Ubuntu / Bash | 下载 amd64 tar.gz,与下载页 SHA-256 对照;解压到自己可写的独立目录 | command -v go,go version |
Linux 不需要覆盖系统目录。以下在下载文件所在目录运行,$PWD 是当前目录;先确认 go-course-toolchain 尚不存在,再解压到这个新目录:
sha256sum go1.27.2.linux-amd64.tar.gz
mkdir go-course-toolchain
tar -C go-course-toolchain -xzf go1.27.2.linux-amd64.tar.gz
export PATH="$PWD/go-course-toolchain/go/bin:$PATH"
go version这次 export 只影响当前终端。新终端需要再次设置,或确认无误后把对应绝对目录加入自己的 Shell 配置。不要同时手动设置 GOROOT;普通安装由工具链自己确定标准库位置。预期版本输出包含 go1.27.2,平台分别为 windows/amd64、darwin/arm64、linux/amd64。go env GOOS GOARCH 可再确认目标平台。
目录、文件与模块
终端执行命令时有一个“当前目录”。pwd/Get-Location 查看它,cd 改变它;相对路径从当前目录开始,绝对路径从盘符或根目录开始。空格路径需要引号,例如 PowerShell 的 cd 'D:\学习 Go'。main.go 是保存代码的 UTF-8 文本文件,不是要双击的程序。
在空目录中执行(PowerShell、Bash、Zsh 均适用):
mkdir go-first
cd go-first
go mod init example.com/go-first预期生成 go.mod。模块是这一组包及依赖的边界,example.com/go-first 是本地练习的模块名,不需要真的注册域名。一个目录里的普通 .go 文件通常属于同一个包;package main 表示可执行程序,func main() 是程序入口。已有示例目录包含 go.mod 时不要再次 init。
用编辑器在 go-first 中保存 main.go,完整内容如下:
package main
import "fmt"
func main() {
name := "Go"
lessons := 3
fmt.Printf("你好,%s;今天练习 %d 次\n", name, lessons)
}预期输出:
你好,Go;今天练习 3 次在这个目录执行 go fmt ./... 整理格式,执行 go run . 编译并运行。点号表示当前包;程序运行后终端重新出现提示符,表示进程已经退出。注释用 //,语句末通常不写分号;左花括号和 func main() 在同一行。
import "fmt" 引入标准库格式化包。:= 声明并初始化局部变量;%s 输出字符串,%d 输出整数,\n 换行。字符串用双引号,中文引号不能替代代码引号。
go.mod file not found 与首次运行排错
看到 go.mod file not found,先查看当前目录是否有 go.mod;若刚建立空项目,执行上面的 init;若使用仓库示例,cd 到其模块目录。不要在磁盘根目录 init 来“修好”错误,那会把不相关文件放入同一模块。
go: command not found 或 PowerShell “无法将 go 识别为…”:先检查安装与 PATH,再开新终端。declared and not used:局部变量声明后没有用,删除无用变量或把它用于结果。imported and not used:移除多余导入。syntax error:从报告的文件和行号开始,检查前一行的括号和引号;一次只改一个原因。
编译为可重复启动的文件:Windows 用 go build -o first.exe . 后 ./first.exe;Bash/Zsh 用 go build -o first . 后 ./first。go build 成功时通常没有输出;go run 的临时二进制不是你要分发的文件。
练习与自检
把名字改成“学习者”,把次数改成 5。先预测输出,再运行;然后声明 var done bool,用 %t 输出它,验证没有初始化的布尔值。预期最后一个值是 false。进一步解释:源文件、编译后的程序和正在执行的进程分别是什么?
参考解法
将 name := "Go" 改为 name := "学习者",lessons := 3 改为 lessons := 5。在 main 内增加 var done bool 和 fmt.Printf("完成:%t\n", done)。第一行是“你好,学习者;今天练习 5 次”,第二行“完成:false”。变量的零值由类型决定;字符串为空串、数值为 0、布尔为 false。源文件是输入,二进制是编译输出,进程是一次运行中的实例。
继续阅读
- 开发实践
- 开发实践
- 开发实践