跳到主要内容

Go 包和模块

本章将介绍 Go 的包管理和模块系统。

包 (Package)

什么是包

包是 Go 组织代码的基本单位,每个 .go 文件都属于一个包。

包命名

  • 包名通常是小写的单词
  • 与目录名保持一致
  • main 包是程序入口

导入包

import "fmt"
import "os"

import (
"fmt"
"os"
"strings"
)

导出名称

以大写字母开头的名称是导出的,可以被其他包访问:

type Person struct { // 导出
Name string // 导出
age int // 不导出
}

func PublicFunc() {} // 导出
func privateFunc() {} // 不导出

模块 (Module)

初始化模块

go mod init module-name

生成 go.mod 文件:

module mymodule

go 1.21

添加依赖

go get github.com/gin-gonic/gin

管理依赖

# 下载所有依赖
go mod download

# 整理依赖
go mod tidy

# 列出依赖
go list -m all

# 降级依赖
go get github.com/pkg/[email protected]

目录结构

myproject/
├── go.mod
├── go.sum
├── main.go
├── utils/
│ ├── go.mod (可选)
│ └── helper.go
└── api/
└── handler.go

工作区模式

Go 1.18 引入的工作区模式允许同时开发多个模块:

go work init ./module1 ./module2

生成 go.work 文件:

go 1.21

use (
./module1
./module2
)

小结

  1. :代码组织单元
  2. 模块:依赖管理单元
  3. go.mod:模块定义文件
  4. go get:添加依赖
  5. go mod tidy:整理依赖

练习

  1. 创建模块并添加依赖
  2. 创建自定义包并导入使用
  3. 使用 go mod tidy 整理依赖