liuhaijun e94826ce29 add server
Change-Id: I0760f17f6a01c0121b59fcbfafc666032dbc30af
2024-09-19 09:44:15 +00:00

119 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# go project种子项目
本项目基于 gin 框架为核心的一个脚手架搭建而成,可以基于本项目快速完成业务开发,开箱📦 即用。
HTTP 运行
拉取代码后在项目根目录执行如下命令:
# 本地有 go 环境,版本 >= 1.18.1
# 建议开启GO111MODULE
# go env -w GO111MODULE=on
# 配置Go Mod引用私有库
go env -w GOPRIVATE=git.inspur.com
go env -w GOINSECURE=git.inspur.com
go env -w GOPROXY="http://nexus.inspur.local/repository/go-public/,direct"
# 依赖管理
go mod tidy
# 依赖库下载
go mod vendor
# 首次运行会自动复制一份示例配置config/config.example.yaml文件到config目录(config/config.yaml)
go run main.go
# 项目起来后执行下面命令访问示例路由
curl "http://127.0.0.1:8899/api/v1/hello-world"
# {"code":0,"message":"OK","data":{"result":"hello gin-layout"},"cost":"6.151µs"}
curl "http://127.0.0.1:8899/api/v1/hello-world?name=world"
# {"code":0,"message":"OK","data":{"result":"hello world"},"cost":"6.87µs"}
部署
# 打包项目如何打包其他os平台的包自行 google
go build -o cmd/ main.go
# 运行时请配置指定config文件的位置否则可能会出现找不到配置的情况修改完配置请重启
cmd/main.go -c="指定配置文件位置(/home/config.yaml"
# nginx 反向代理配置示例
server {
listen 80;
server_name api.xxx.com;
location / {
proxy_set_header Host $host;
proxy_pass http://172.0.0.1:8899;
}
}
目录结构
.
|——.gitignore
|——go.mod
|——go.sum
|——main.go // 项目入口 main 包
|——LICENSE
|——README.md
|——doc // 设计和用户文档
|——db // 数据库脚本
|——hack // 用于执行各种构建,安装,分析等操作的脚本。
|——boot // 项目初始化目录
| └──boot.go
|——config // 这里通常维护一些本地调试用的样例配置文件
| └──autoload // 配置文件的结构体定义包
| └──app.go
| └──logger.go
| └──mysql.go
| └──redis.go
| └──server.go
| └──config.example.ini // .ini 配置示例文件
| └──config.example.yaml // .yaml 配置示例文件
| └──config.go // 配置初始化文件
|——data // 数据初始化目录
| └──data.go
| └──mysql.go
| └──redis.go
|——internal // 该服务所有不对外暴露的代码通常的业务逻辑都在这下面使用internal避免错误引用
| └──controller // 控制器代码
| └──v1
| └──auth.go // 完整流程演示代码,包含数据库表的操作
| └──helloword.go // 基础演示代码
| └──base.go
| └──middleware // 中间件目录
| └──cors.go
| └──logger.go
| └──recovery.go
| └──requestCost.go
| └──model // 业务数据访问
| └──admin_users.go
| └──base.go
| └──pkg // 内部使用包
| └──errors // 错误定义
| └──code.go
| └──en-us.go
| └──zh-cn.go
| └──logger // 日志处理
| └──logger.go
| └──response // 统一响应输出
| └──response.go
| └──routers // 路由定义
| └──apiRouter.go
| └──router.go
| └──service // 业务逻辑
| └──auth.go
| └──validator // 请求参数验证器
| └──form // 表单参数定义
| └──auth.go
| └──validator.go
|——pkg // 可以被外部使用的包
| └──convert // 数据类型转换
| └──convert.go
| └──utils // 帮助函数
| └──utils.go
生产环境注意事项
在构建生产环境时,请配置好 .yaml 文件中基础路径 base_path所有的日志记录文件会保存在该目录下的 {base_path}/gin-layout/logs/ 里面,该基础路径默认为执行命令的目录
其他说明
项目中使用到的包
核心gin
配置gopkg.in/yaml.v3、gopkg.in/ini.v1
参数验证github.com/go-playground/validator/v10
日志go.uber.org/zap、github.com/natefinch/lumberjack、github.com/lestrrat-go/file-rotatelogs
数据库gorm.io/gorm、go-redis/v8
还有其他不一一列举更多请查看go.mod文件