要求:
如何定义一个自定义模块并引入?
- 步骤 1:创建主项my_app
mkdir my_app
- 步骤 2:定义自定义模块
- 创建模块名
cd /my_app
mkdir my_mod
cd my_mod
go mod init my_mod
- go.mod 代码如下:
module my_mod
go 1.25.1
- 定义模块的功能代码,touch a.go(文件名随意)
package my_mod
import "fmt"
func A() {
fmt.Println("A")
}
此时,模块名和功能定义好了,注意如果模块再公司或者外部 git,可以用完整的 git 路径,如:
module git.yourcompany.com/team/go_mod_test
- 步骤 2:在主模块引入自定义模块
- 进入根目录
cd /my_app
go mod init my-app
产出 my_app 的 go.mod
module my-app
go 1.25.1
// 本地模块映射
my_mod => ./my_mod
require (
my_mod v0.0.0 // 版本号可以是任意值
)
引入模块并调用
package main
import "fmt"
import "my_mod"
func main() {
my_mod.A()
fmt.Println("Hello, World!")
}
- 步骤 3: 运行 main.go
结论:
- go 引入模块需要做 2 件事,一是通过 go.mod 声明当前模块名,而是声明依赖
- 被依赖的模块的名字可以是 git 路径,也可以是本地文件名,必须通过 replace 指定本地物理目录
- 如果项目发布到了 git,最好通过 git 路径,这样方便下载依赖
go 一些流行的第三方依赖
Go 语言常用的第三方模块:
Web 框架 gin-gonic/gin: 高性能 HTTP 框架,最流行 gorilla/mux: 路由库 echo: 高性能、极简框架
数据库 gorm.io/gorm: ORM 框架,功能强大 go-sql-driver/mysql: MySQL 驱动 lib/pq: PostgreSQL 驱动 go-redis/redis: Redis 客户端
工具库 spf13/viper: 配置管理 spf13/cobra: 命令行工具 uber-go/zap: 高性能日志库 sirupsen/logrus: 结构化日志
测试 stretchr/testify: 测试断言和 mock golang/mock: mock 框架
网络和 API grpc/grpc-go: gRPC 框架 gorilla/websocket: WebSocket go-resty/resty: HTTP 客户端
数据处理 encoding/json 标准库已经够用 goccy/go-json: 更快的 JSON 库 shopspring/decimal: 精确小数计算
其他常用 golang.org/x/crypto: 加密扩展 jwt-go: JWT 认证 go-playground/validator: 数据验证
这些是 GitHub 上 star 数较高、社区活跃的库。