学习了基础语法后,是时候动手写一个完整的项目了。本章将从零开始构建一个简单的 CLI 工具(简易计算器),重点讲解 Go Modules 依赖管理和标准的 项目目录结构。
1. 初始化项目
首先,创建一个文件夹并初始化 Go Module。go mod 是 Go 官方的依赖管理工具。
mkdir my-calc
cd my-calc
# 初始化模块,模块名为 example.com/calc
go mod init example.com/calc执行后会生成一个 go.mod 文件,它声明了模块名称和 Go 版本。
2. 项目结构
虽然 Go 对目录结构没有强制要求,但社区约定俗成的标准布局(Standard Layout)如下:
my-calc/
├── go.mod // 模块定义
├── main.go // 程序入口
└── pkg/ // 库代码目录
└── mathop/ // 子包:数学操作
└── add.go3. 编写代码
编写子包逻辑
在 pkg/mathop/add.go 中编写核心业务逻辑:
package mathop
// Add 函数首字母大写,表示是可以导出的(Public)
func Add(a, b int) int {
return a + b
}编写入口函数
在根目录 main.go 中调用我们的子包:
package main
import (
"fmt"
"os"
"strconv"
// 导入刚才定义的包
"example.com/calc/pkg/mathop"
)
func main() {
// 读取命令行参数
if len(os.Args) < 3 {
fmt.Println("Usage: calc <num1> <num2>")
return
}
// 解析参数
a, _ := strconv.Atoi(os.Args[1])
b, _ := strconv.Atoi(os.Args[2])
// 调用业务逻辑
sum := mathop.Add(a, b)
fmt.Printf("%d + %d = %d\n", a, b, sum)
}4. 运行与构建
开发阶段运行
$ go run main.go 10 20
10 + 20 = 30编译构建
# 构建生成可执行文件
$ go build -o calc
# 运行二进制文件
$ ./calc 50 50
50 + 50 = 100关键点解释
go.mod:任何 Go 项目的起点。如果需要引用第三方库(如 GitHub 上的库),使用
go get命令会自动更新此文件。包可见性:只有 首字母大写 的函数、变量、结构体才能被其他包访问(Public),小写则为包私有(Private)。
交叉编译:Go 的一大杀手锏。在 Mac 上编译 Linux 程序只需:
GOOS=linux go build。
小结
一个标准的 Go 项目包含 go.mod 管理依赖,清晰的目录结构分离 main 入口和业务逻辑。掌握这些,你就可以开始构建复杂的应用了。
练习题
扩展此项目,添加一个
Subtract函数支持减法。尝试引入一个第三方库(如
github.com/fatih/color),让输出的结果带有颜色。