Skip to content
yahuian edited this page Nov 13, 2024 · 12 revisions

dog

🐶 一个集成了众多社区优秀组件的 Go Web API 开发模板,简洁、高效、自由

开发背景

刚入门 go web 开发时,使用 gin 快速上手,然后不断的各种找组件(日志、配置、ORM等等),玩的不亦乐乎

后续感觉每次写新项目自己组装有点麻烦,遂尝试了 beego 以及 goframe 框架,使用了一段时间后,终究感觉不太自由

于是就开发了这个模板,简洁自由,无过度封装

集成组件

代码结构

三层结构

three-level

  • model: 数据库 CRUD、缓存、可供其他 service 调用的通用业务逻辑
  • service: 按职责划分的模块内部业务逻辑
  • api: 数据解析,参数校验,数据组装,结果返回

注意点

  • service 之间不可调用,避免造成循环依赖的问题
  • api 和 service 都可以调用 model 层
  • 不用纠结代码放在哪层,前期可以统一放在 service 中,随着项目的发展,不断将逻辑提炼到 api 和 model 中,避免某一层代码太重

模块说明

  • cmd: 放项目中可执行的文件
  • config: 配置
  • docs: swagger 文件以及项目文档
  • errcode: 业务错误码
  • pkg: 可能后续会提供给外部项目,或者单独分装为库使用的包
  • sql: 数据库 sql 文件

快速上手

git clone git@github.com:yahuian/dog.git

cd dog

# 生成 swagger 文档
go install github.com/swaggo/swag/cmd/swag@latest

# 开发时代码热重载
go install github.com/cosmtrek/air@latest

# 生成本地配置文件并修改 DB.DSN
cp config/config.example.yaml config/config.yaml

# model service api 代码生成
go run cmd/dog/main.go -p_name=user -m_name=User

# 创建好数据表并补充字段

# 生成 api 文档
# 如果有依赖底层库的结构如 gorm.Model 则需要添加 --parseDependency 参数(生成速度会慢)
swag init

# 启动
# 由于 swag init --parseDependency 比较慢,所以在 air 中没有执行,如果 api 文件有修改,手动执行一次即可
# .air.toml bin = "./tmp/main -config=config/config.yaml" 可以指定配置文件
air

镜像制作

# 修改 Dockerfile 中的镜像名
IMAGE="your image name"

make release TAG=0.0.1
Clone this wiki locally