{"id":37215641,"url":"https://github.com/misterloveb/gowire","last_synced_at":"2026-01-15T00:56:09.849Z","repository":{"id":175798657,"uuid":"652426309","full_name":"Misterloveb/gowire","owner":"Misterloveb","description":"web framework based on wire","archived":false,"fork":false,"pushed_at":"2024-12-27T15:25:52.000Z","size":18069,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"wire","last_synced_at":"2024-12-27T16:26:34.731Z","etag":null,"topics":["gin","google-wire","gorm","layui"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Misterloveb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-06-12T03:51:17.000Z","updated_at":"2024-12-27T15:22:02.000Z","dependencies_parsed_at":null,"dependency_job_id":"36d8db7a-c674-451d-b04c-74cba8796580","html_url":"https://github.com/Misterloveb/gowire","commit_stats":null,"previous_names":["misterloveb/gowire"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/Misterloveb/gowire","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Misterloveb%2Fgowire","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Misterloveb%2Fgowire/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Misterloveb%2Fgowire/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Misterloveb%2Fgowire/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Misterloveb","download_url":"https://codeload.github.com/Misterloveb/gowire/tar.gz/refs/heads/wire","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Misterloveb%2Fgowire/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28440951,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-15T00:55:22.719Z","status":"ssl_error","status_checked_at":"2026-01-15T00:55:20.945Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gin","google-wire","gorm","layui"],"created_at":"2026-01-15T00:56:09.199Z","updated_at":"2026-01-15T00:56:09.822Z","avatar_url":"https://github.com/Misterloveb.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# gowire\n\n***`gowire` 是基于 **wire** (***依赖注入***) 构建的一个web项目，`wire`基于代码生成技术，编译期审查代码，更加容易发现问题，无反射，运行效率更高***\n## 功能\n- **Wire**: https://github.com/google/wire\n- **Gin**: https://github.com/gin-gonic/gin\n- **Gorm**: https://github.com/go-gorm/gorm\n- **Viper**: https://github.com/spf13/viper\n- **Go-redis**: https://github.com/redis/go-redis/v9\n- **logrus**: https://github.com/sirupsen/logrus\n- **excelize**: https://github.com/xuri/excelize/v2\n- **lumberjack**: https://gopkg.in/natefinch/lumberjack.v2\n- **base64Captcha**: https://github.com/mojocn/base64Captcha\n- **carbon**: https://github.com/golang-module/carbon/v2\n- **session**: https://github.com/gin-contrib/sessions\n- **layui**: https://github.com/layui/layui\n\n## 目录结构\n\n借鉴 `go` 标准目录结构以及 `mvc` ：\n\n- `cmd`：可执行文件目录，例如 `server/main.go`\n    - `server`： 服务名称，每个服务对应一个目录\n        - `wire`：每个服务用于 `wire` 生成 `wire_gen.go` 的入口目录\n- `config`：项目配置文件，例如 `config.yaml`\n- `internal`：项目内部代码，不对外暴露\n    - `common`：公共使用的`函数/struct等数据`\n    - `controller`：业务逻辑核心目录(包含了路由注册)\n    - `dao`：数据访问对象(Data Access Object)，每张表对应一个dao\n    - `middleware`：业务中的中间件\n    - `model`：表结构到go结构体的映射，每张表对应一个数据模型\n    - `provider`：用于`wire.Build()`进行依赖注入\n    - `server`：构建 HTTP 服务器的代码\n    - `test`：项目测试文件\n    - `view`：html模板文件\n- `pkg`：可重用的代码，对外暴露\n    - `config`：用于读取配置文件信息(基于viper)\n    - `http`：启动http(gin.Engine)用于支持Shutdown服务器优雅退出\n    - `verificationcode`：图形验证码插件\n    - `writer`：用于实现`gin`,`gorm`,`logrus`的`io.Writer`接口，支持自定义文件大小，文件保存周期，文件分割等功能，具体可以参考 [lumberjack](https://gopkg.in/natefinch/lumberjack.v2) \n- `static`：静态资源文件(css/js等)\n- `upload`：存放用户上传的附件\n- `log`：项目的日志文件(启动项目后自动生成)：\n    - `db`：用于记录数据库操作日志(gorm)\n    - `http`：用于记录HTTP请求日志(gin)\n    - `server`：用于记录项目业务日志(controller等业务模块)\n  \n## 所需环境\n\n* Golang \u003e= 1.16\n* Git\n* MySQL \u003e= 5.7\n* Redis（可选 | 6.0）\n* docker\u0026docker-compose（可选）\n* 安装 wire 并确保将 $GOPATH/bin 添加到 $PATH 中\n```go\n    go install github.com/google/wire/cmd/wire@latest\n```\n## 运行项目\n- `本地`：\n    - 在 `gowire` 项目根目录下执行 `go run cmd/server/main.go`\n    - 打开浏览器访问 127.0.0.1:8080\n- `docker`：\n    - `Linux` 环境需要安装 `docker-compose`，`windows` 的`Docker Desktop` 默认已安装，下面是 Linux 安装方法，具体信息可以参考[docker官网](https://docs.docker.com/compose/install/linux/)\n      - `Ubuntu 和 Debian`\n      ``` shell\n       sudo apt-get update\n       sudo apt-get install docker-compose-plugin\n      ```\n      - ` RPM-based `\n      ``` shell\n      sudo yum update\n      sudo yum install docker-compose-plugin\n      ```\n    - 在 `gowire` 项目根目录下执行 `docker-compose up -d`，等待构建完毕。。。🍵☕🧋\n    - Linux本机浏览器访问 `127.0.0.1:8080` ，虚拟机则需在宿主浏览器访问 `虚拟机IP:8080`\n## 开发流程\n- `注册路由`： 路由注册统一放在 `internal/controller/router.go`，业务 `controller` 如果需要注册路由，只需各自实现 `RegisterRouter` 方法，系统会自动注册路由\n- `添加controller`：\n    - 一个业务模块一个文件，均放在 `internal/controller/` 目录下\n    - 新增或删除一个 `contoller` 文件\n        - 1： 修改 `internal/controller/router.go`文件中的 `RegisterController` 结构体(用于自动注册路由)\n        - 2： 修改 `internal/provider/controller.go`，添加对应 `controller` 的provider，以及修改 `provider.CommonController` ( `CommonController` 仅仅用于减少 `wire.build()` 的代码量，使其看起来比较”优雅“🙂)\n- `添加dao`：一张表一个dao文件，文件名为数据库表名，均放在`internal/dao/`目录下\n    - 每新增或删除一个`dao`文件:\n        - 1：修改 `internal/provider/provider.go` ，提供对应dao的provider,具体请参照 `provider.go` \n        - 2(可选)：修改 `common/server.CommonDao` (controller共用的dao)\n- `重新构建项目`：如果更改了 `cmd/server/wire/wire.go` 文件或其中 `wire.Build` 所需要的 `provider` 被修改，均需要重新执行 `wire` 命令重新生成 `wire_gen.go` 文件（除第一次调用 `wire` ，以后只需要对 `wire_gen.go` 执行 `go generate` 即可🙂）\n\n## 许可证\n\ngowire是根据MIT许可证发布的。有关更多信息，请参见[LICENSE](LICENSE)文件。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmisterloveb%2Fgowire","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmisterloveb%2Fgowire","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmisterloveb%2Fgowire/lists"}