gowire

module
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 19, 2023 License: MIT

README

gowire

gowire 是基于 wire (依赖注入) 构建的一个web项目,wire基于代码生成技术,编译期审查代码,更加容易发现问题,无反射,运行效率更高

功能

目录结构

借鉴 go 标准目录结构以及 mvc

  • cmd:可执行文件目录,例如 server/main.go
    • server: 服务名称,每个服务对应一个目录
      • wire:每个服务用于 wire 生成 wire_gen.go 的入口目录
  • config:项目配置文件,例如 config.yaml
  • internal:项目内部代码,不对外暴露
    • common:公共使用的函数/struct等数据
    • controller:业务逻辑核心目录(包含了路由注册)
    • dao:数据访问对象(Data Access Object),每张表对应一个dao
    • middleware:业务中的中间件
    • model:表结构到go结构体的映射,每张表对应一个数据模型
    • provider:用于wire.Build()进行依赖注入
    • server:构建 HTTP 服务器的代码
    • test:项目测试文件
    • view:html模板文件
  • pkg:可重用的代码,对外暴露
    • config:用于读取配置文件信息(基于viper)
    • http:启动http(gin.Engine)用于支持Shutdown服务器优雅退出
    • verificationcode:图形验证码插件
    • writer:用于实现gin,gorm,logrusio.Writer接口,支持自定义文件大小,文件保存周期,文件分割等功能,具体可以参考 lumberjack
  • static:静态资源文件(css/js等)
  • upload:存放用户上传的附件
  • log:项目的日志文件(启动项目后自动生成):
    • db:用于记录数据库操作日志(gorm)
    • http:用于记录HTTP请求日志(gin)
    • server:用于记录项目业务日志(controller等业务模块)

所需环境

  • Golang >= 1.16
  • Git
  • MySQL >= 5.7
  • Redis(可选 | 6.0)
  • docker&docker-compose(可选)
  • 安装 wire 并确保将 $GOPATH/bin 添加到 $PATH 中
    go install github.com/google/wire/cmd/wire@latest

运行项目

  • 本地
    • gowire 项目根目录下执行 go run cmd/server/main.go
    • 打开浏览器访问 127.0.0.1:8080
  • docker
    • Linux 环境需要安装 docker-composewindowsDocker Desktop 默认已安装,下面是 Linux 安装方法,具体信息可以参考docker官网
      • Ubuntu 和 Debian
       sudo apt-get update
       sudo apt-get install docker-compose-plugin
      
      • RPM-based
      sudo yum update
      sudo yum install docker-compose-plugin
      
    • gowire 项目根目录下执行 docker-compose up -d,等待构建完毕。。。🍵☕🧋
    • Linux本机浏览器访问 127.0.0.1:8080 ,虚拟机则需在宿主浏览器访问 虚拟机IP:8080

开发流程

  • 注册路由: 路由注册统一放在 internal/controller/router.go,业务 controller 如果需要注册路由,只需各自实现 RegisterRouter 方法,系统会自动注册路由
  • 添加controller
    • 一个业务模块一个文件,均放在 internal/controller/ 目录下
    • 新增或删除一个 contoller 文件
      • 1: 修改 internal/controller/router.go文件中的 RegisterController 结构体(用于自动注册路由)
      • 2: 修改 internal/provider/controller.go,添加对应 controller 的provider,以及修改 provider.CommonController ( CommonController 仅仅用于减少 wire.build() 的代码量,使其看起来比较”优雅“🙂)
  • 添加dao:一张表一个dao文件,文件名为数据库表名,均放在internal/dao/目录下
    • 每新增或删除一个dao文件:
      • 1:修改 internal/provider/provider.go ,提供对应dao的provider,具体请参照 provider.go
      • 2(可选):修改 common/server.CommonDao (controller共用的dao)
  • 重新构建项目:如果更改了 cmd/server/wire/wire.go 文件或其中 wire.Build 所需要的 provider 被修改,均需要重新执行 wire 命令重新生成 wire_gen.go 文件(除第一次调用 wire ,以后只需要对 wire_gen.go 执行 go generate 即可🙂)

许可证

gowire是根据MIT许可证发布的。有关更多信息,请参见LICENSE文件。

Directories

Path Synopsis
cmd
internal
dao
pkg
log

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL