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)
CGO_ENABLED=0:禁用CGO
GOOS=linux:编译后的操作系统是Linux
GOARCH=amd64:编译后的CPU架构是amd64
-a:强制编译所有package
-installsuffix cgo:指定额外的后缀
-o cfn-schedule-agent:将编译后的程序存储为cfn-schedule-agent
.:编译当前路径下所有代码
linux平台上编译命令:
linux:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -installsuffix cgo -o cfn-schedule-agent .
windows:
CGO_ENABLED=1 GOOS=windows GOARCH=amd64 go build -a -installsuffix cgo -o cfn-schedule-agent .
windows平台上编译命令:
linux:
set GOOS=linux
set GOARCH=amd64
set CGO_ENABLED=0
go env -w GOARCH=amd64
go env -w GOOS=linux
go env -w CGO_ENABLED=0
go build -a -installsuffix cgo -o cfn-schedule-agent .
windows:
set GOOS=windows
set GOARCH=amd64
set CGO_ENABLED=0
go env -w GOARCH=amd64
go env -w GOOS=windows
go env -w CGO_ENABLED=0
go build -a -installsuffix cgo -o cfn-schedule-agent .
运行时请配置指定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文件