• Ginvel是Golang的一款web MVC框架,基础特性基于Gin、gRPC、Go1.17+、Redis5+


    说明(当前版本:gv3.+ )

    Ginvel是GinLaravel的难度版(升级版)。Ginvel使用起来可能比较难,入门难、操作难、阅读难。

    Ginvel是Golang的web MVC框架,基础特性基于Gin、gRPC、Go1.17+、Redis5+。

    Ginvel3框架仓库:

    (大陆)https://bitbucket.org/ginvel/ginvel3

    (推荐)https://github.com/fyonecon/ginvel3

    现已支持:

    Go-MySQL、GORM(v2)、Go-Redis、热更(fresh)、Swagger、MVC(不推荐使用)、HTML模版输出、Http访问频率拦截、Http熔断机制、HttpCors、对称加密(可中文)、http拦截器、熔断、多层路由、分词与全文检索、运行时监控、图形验证码、生成和读取Excel、全局定时器等。

    测试过的客户端环境等:Vue3+Axios、Fetch、POST(x-www-form-urlencoded)、GET、Centos7、Mac。

    设计理念

    宽进严出,功能组合式,面向Api,适合复杂项目,任何参数或服务都会有默认值。整个项目运行需go(1.17+<2021~>)+mysql+redis!

    state状态码示意:1请求成功+接口有数据,StatusCode为200;0请求成功+接口无数据,包含请求条件不足,StatusCode为200;403被拒绝访问,StatusCode为403;404接口名称错误,StatusCode为404;429请求频率限制或请求拥挤,StatusCode为429;500服务器代码错误,StatusCode为500。

    默认端口:http默认9500,grpc默认9600

    路由周期

    var全局参数+init()+main ➡️ 请求路由名 ➡️ header过滤 ➡️ 拦截请求频率 ➡️ 请求熔断机制 ➡️ 校验请求方法和Token参数 ➡️ 运行目标函数 ➡️ Controller程序并返回Json ➡️ 治理或运行时监控服务 ➡️ 程序结束

    项目目录

    • /app/ ※ 你的项目目录

    • /app/request/ ※ http(api、ws)、rpc控制器目录,这是你写项目代码的地方

    • /app/arm/ ※ 项目运行时治理(辅助数据采集)

    • /bootstrap/ ※ 框架启动,驱动启动

    • /common/helper/ ※ 公共函数,助手函数

    • /common/kits/ ※ 公共封装插件

    • /docs/ ※ swagger文件目录

    • /internal/ ※ 框架基础

    • /internal/reader/ ※ 读取配置文件

    • /internal/processes/ ※ 框架运行时

    • /internal/middlewares/ ※ 框架中间件

    • /internal/providers/ ※ 框架服务提供(初始化服务)

    • /routes/xxx_group/ ※ xxx分组路由,包括api、html模板、websocket三个路由,非rpc路由

    • /storage/ ※ 系统日志、文件上传、静态缓存、toml配置文件等。目录需权限777(chmod -R 777 storage)。

    • Dockerfile ※ 执行Docker命令的文件

    • runner.conf ※ fresh自动刷新参数配置文件

    • ginvel ※ 或名为"main",项目生产的二进制文件,在生产环境用。目录需权限773。

    • go.mod ※ 项目所依赖的module路径、第三方库等的引入

    • main.go ※ 跑起本项目的入口main文件。

    命名原则

    • 自定义函数:大驼峰
    • 自定义变量:小驼峰
    • 自定义类:大驼峰
    • 自定义结构体和结构体成员:大驼峰
    • MySQL、Redis:小写+下划线
    • 接口名:小写+下划线
    • 系统集文件夹名或文件名:小写
    • 自定义文件夹名:大驼峰

    基础环境

    1⃣️Go运行环境

    ️搭建Go和基础Gin环境请参考:【GO教程5】Mac搭建简单Gin项目_fyonecon的博客-CSDN博客_mac 配置gin

    2⃣️MySQL5.7+

    请将/项目资料/ginlaravel.sql 文件导入到你的数据库

    3⃣️Redis

    请提前开启你的Redis服务

    cmd中运行「 go run main.go 」即可启动项目。

    或使用热更方式启动http服务,在cmd中目录运行"fresh"。v1.4开始为适配swaggo遂将server.go更名为main.go。

    访问

    http://127.0.0.1:9500

    项目上线

    serverConfig["ENV"]的值改成release,然后使用以上同样方法运行。

    如何初始化项目

    以当前目录 /Users/fyonecon/go/src/ 为例

    1. 获取源代码:
    2. cd go/src
    3. git clone https://github.com/fyonecon/ginvel3.git
    4. 初始化项目:
    5. go mod init
    6. 清除不需要的vendor中的第三方扩展:
    7. go mod tidy
    8. 重新载入vendor中的第三方扩展:
    9. go mod vendor
    10. 将项目打包成二进制文件:
    11. go build -mod=mod
    12. (运行二进制文件需要ginvel的文件的权限为:chmod 773 ginvel)
    13. 在/stoarge/config_toml/local.framkwork.toml配置框架参数、mysql、redis、es等信息。
    14. 启动http服务:
    15. go run main.go
    16. 或 启动二进制文件http服务:
    17. ./ginvel

    运行fresh热更服务(Mac环境)

    以项目目录 /Users/fyonecon/go/src/ginvel 为例

    1. 安装fresh:
    2. go get github.com/pilu/fresh
    3. 去.bash_profile文件目录:
    4. cd ~
    5. 重新编译配置文件:
    6. source ~/.bash_profile
    7. 切换到项目根目录:
    8. cd go/src/ginvel
    9. 开启热更(其中项目"/storage/"目录及其子目录需要777权限。):
    10. fresh
    11. 退出http服务用快捷键:Ctrl + C 。或直接关闭终端窗口。
    12. 注意,在Mac开发环境中:
    13. 以上所用命令在Goland的terminal里面只运行fresh就可以了,
    14. 但是为了方便,也可在iterm2软件里面设置shell一次性运行:
    15. iterm2——设置——Profiles——点左侧新建——General
    16. ——Cammand(选择 Login Shell)填入括号里面
    17. cd ~; source ~/.bash_profile; cd /Users/fyonecon/go/src/ginvel; fresh;】
    18. 内容即可。

    以上即可项目开启的fresh热更服务。 若想一直开启终端窗口,请使用screen(yum install screen)来保持窗口。

    热更服务文档:GitHub - gravityblast/fresh: Build and (re)start go web apps after saving/creating/deleting source files. 。

    Swagger接口文档

    官方教程:GitHub - swaggo/gin-swagger: gin middleware to automatically generate RESTful API documentation with Swagger 2.0.

    安装教程,在/routes/route_default.go路由文件里面,不需要再次安装和引入。)如下:

    1. 1。进入项目跟目录
    2. 2。安装swag命令:
    3. go get -u github.com/swaggo/swag/cmd/swag
    4. 3。查看是否命令是否安装成功:
    5. swag -v
    6. 3.1。安装docs
    7. swag init
    8. 3.2。切换到vendor目录,将swaggo安装在vendor目录下而不是全局安装:
    9. cd vendor
    10. 4。安装 gin-swagger:
    11. go get -u github.com/swaggo/gin-swagger
    12. go get -u github.com/swaggo/files
    13. go mod vendor
    14. 5。在route里面import引入swag:
    15. import (
    16. swaggerFiles "github.com/swaggo/files"
    17. ginSwagger "github.com/swaggo/gin-swagger"
    18. _ "ginlaravel/docs" // docs is generated by Swag CLI, you have to import it.
    19. )
    20. 5.1。书写路由:
    21. url := ginSwagger.URL("http://127.0.0.1:8090/swagger/doc.json") // The url pointing to API definition
    22. route.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler, url))
    23. 5.2。启动http服务:go run main.go
    24. 5.3。访问:http://127.0.0.1:8090/swagger/index.html

    将项目打包成二进制文件(Mac、Centos环境)

    1. #1。在ginvel项目根目录为例:
    2. go build -mod=mod
    3. (或 go build main.go ,main文二进制文件将是目标文件。)
    4. #此时,在项目目录生成或更新了名字叫做"ginvel"二进制文件。其中"ginvel"是go module的名字,这是约定好的名称。
    5. #2。开启文件的可执行权限:
    6. chmod 773 ginvel
    7. #3。在项目根目录运行:
    8. ./ginvel
    9. (或 ./main)
    10. #即可开启二进制服务。
    11. # ⚠️提示:利用二进制服务开启web服务的最小代码和目录为:
    12. /storage/ 目录及其子目录,权限777(chmod -R 777 storage)
    13. runner.conf 文件,权限755
    14. ginvel或main二进制文件。 文件,权限773或777。(chmod 773 ginvel或chmod 773 main)

    将项目编译成exe可执行文件

    1. CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go

    将Go项目部署在Centos7上(Go环境搭建、服务器环境搭建、数据库环境搭建)

    教程:【GO-教程6】Centos7安装Golang环境(基于ginlaravel框架演示,简单ab压测)_fyonecon的博客-CSDN博客

    如何将GOPATH里面的"go get xxx"扩展引用到vendor里面

    先运行"go get 扩展github地址",在项目中import引入"xxx"扩展

    再在项目跟目录运行"go mod vendor"

    这样就可以将扩展自动引用到vendor目录下而不用govendor。

    将go项目部署到centos7的docker中

    1. #1.1)docker images查看制作
    2. FROM golang:latest as builder
    3. # 修改系统为上海时区
    4. RUN echo "Asia/Shanghai" > /etc/timezone \
    5. && rm /etc/localtime && dpkg-reconfigure -f noninteractive tzdata
    6. #作者
    7. MAINTAINER fyonecon "fyonecon@gmail.com"
    8. #设置工作目录(暂时规定最终文件夹名与module名相同)
    9. WORKDIR $GOPATH/src/ginvel
    10. #将服务器的go工程代码加入到docker容器中
    11. ADD . $GOPATH/src/ginvel
    12. #修改env参数
    13. RUN go env -w GO111MODULE=on
    14. RUN go env -w GOPROXY=https://goproxy.cn,direct
    15. RUN export GIN_MODE=release
    16. #初始化框架所需扩展
    17. # RUN go mod vendor
    18. #编译成二进制文件
    19. RUN go build main.go
    20. #RUN go build -o /tmp/main main.go
    21. #暴露端口
    22. EXPOSE 9500
    23. EXPOSE 9600
    24. #最终运行docker的命令(运行项目生成的二进制文件)
    25. ENTRYPOINT ["./main"]
    26. #FROM debian:slim
    27. #WORKDIR /go/bin
    28. #COPY --from=builder /tmp/main ./main
    29. #ENTRYPOINT ["/go/bin/main"]
    30. ######### Dockerfile教程 #########
    31. #1.2)制作docker镜像,单独在项目跟目录运行(这个docker镜像名可以自定义,一般与文件夹名或module名一样即可):
    32. #将Dockfile文件放置在项目跟目录,然后运行
    33. #docker build -t ginvel .
    34. #查看镜像
    35. #docker images
    36. #查看正在运行的docker
    37. #docker ps
    38. #查看docker占用内存大小
    39. #docker ps -as
    40. #2)docker运行镜像,运行生成的二进制文件(二进制文件为项目go.mod里面的module名,不可更改。及其重启后,docker的端口映射需要重新运行。)
    41. #第一个端口为宿主机端口,第二个端口为docker端口,注意httpserver的host是0.0.0.0。
    42. #开启docker(前台方式)
    43. #docker run -p 9500:9500 ginvel
    44. #开启docker(后台方式,推荐)
    45. #docker run -p 9500:9500 -d ginvel
    46. # 如有开启rpc等必要,请开启9600端口(参考http-9500方法)
    47. #2.1)查看已运行的docker
    48. #docker ps
    49. #3)查看docker日志
    50. #docker logs -f ginvel
    51. #4)其他(可以使用docker build的名或镜像id,用docker images查看)
    52. #停止服务
    53. #docker stop ginvel
    54. #删除container实例
    55. #docker rm ginvel
    56. #删除container镜像
    57. #docker rmi ginvel
    58. #强行删除container镜像
    59. #docker rmi -f ginvel
    60. #5)进入docker的命令
    61. #查看正在运行的docker的id(docker images不行)
    62. #sudo docker ps
    63. #进入docker
    64. #sudo docker exec -it 正在运行的docker的id /bin/bash

    单元测试testing

    运行单元测试需要cd到相关文件的目录(有xxx_test.go的目录,例如cd internal/helper/),然后运行:

    go test
    

    注意:本框架本身一般不需要单元测试(因为在源代码已经做了各种可能条件的判断、过滤、限制)。你可以用单元测试来测试你的自定义函数即可。

    Ginvel版权

    Apache2.0

  • 相关阅读:
    376. 机器任务
    C++运算符重载【加号、左移、递增、指针、赋值、中括号、关系、函数调用】,统统载了
    物联网常见协议篇
    这几个重要协议,是网络工程师加薪的秘密
    第五章-项目范围管理
    记录微信小程序项目遇到的几个问题
    解决git无法上传大文件(50MB)
    基于SSM的点餐平台系统设计与实现
    wpf中TreeView的滚动条
    Cadence OrCAD Capture 查找功能详细介绍
  • 原文地址:https://blog.csdn.net/weixin_41827162/article/details/125631215