Go项目实践二(gin+vue)

Go项目实践二(gin+vue)1. 目录结构.├── README.md├── common # 通用│ ├── datasource # 数据源│ ├── logger # 日志│ ├── middleware # gin中间件│ ├── req # 请求│ ├── resp # 响应│ ├── retu
摘要由CSDN通过智能技术生成

Go项目实践二(gin+vue)

1. 目录结构

.
├── README.md
├── common                  # 通用
│   ├── datasource          # 数据源
│   ├── logger              # 日志
│   ├── middleware          # gin中间件
│   ├── req                 # 请求
│   ├── resp                # 响应
│   ├── returncode          # 响应码
│   ├── setting             # 设置
│   ├── utils               # 工具
│   └── validator           # 校验
├── config                  # 配置
│   └── config.yml
├── doc                     # 文档
│   └── june.sql
├── go.mod
├── go.sum
├── log                     # 日志输出目录
├── main.go                 # 启动入口文件
├── models                  # 数据模型
│   └── vo
├── repository              # 持久层
│   ├── baseRepo.go
├── routers                 # 路由
│   └── router.go
├── service                 # 服务层
└── web                     # 接口层

如果是做过Java后端开发的应该会对这个目录结构眼熟,没错!就是参考了Spring MVC的目录结构,包括使用了facebookgo/inject依赖注入库的使用,就会发现和Spring的编程方式很相似(Java中毒太深😂)

其中,

  • common包里包含整个项目的通用模块代码,比如工具、数据库、日志、状态码等
  • models包是数据模型
  • repository包是数据持久层,编写数据库操作相关的逻辑
  • service包主要是编写业务逻辑
  • web包则是接口层,包含对入参数的校验等处理
  • main.go是整个程序的入口

按照以上进行分包,整体代码就会比较整齐

2. restful API和状态码的设计

关于restful API和状态码的设计可以参考这篇文章《restful API和状态码的设计》

除了由于gin的路由匹配规则不支持,对部分API进行了调整,其他基本保持一致。而状态码则去除了微服务代码这一段(因为这是个单体服务😅),基本上也保持一致

3. 权限的设计

3.1 权限数据模型

权限模型

模型很简单,一眼应该能看明白。然后有两个需要注意的地方是:

  1. 前端页面上控制菜单和按钮的权限标识使用的是t_sys_menuperm字段,而后端做API权限校验的时候则通过t_sys_apimethoduri字段组合来进行,这也是为什么表t_sys_menu和表t_sys_api需要进行关联。
  2. t_sys_client表用于保存第三方应用,通过t_sys_client_api关联到我们的API,其中加上ip字段,可以对来源IP,做进一步的限制。(暂未实现client的校验🙈)

3.2 登录认证

登录认证功能是基于appleboy/gin-jwt/v2库实现的,比较简单,我们只需要根据自己的逻辑实现GinJWTMiddleware的相关方法就好了。

  1. 首先确定我们需要保存到token里的信息,例如我这里保存了用户ID、登录名、角色和权限标识列表
type UserPermVo struct {
   
	UserId    int32    `json:"userId"`
	LoginName string   `json:"loginName"`
	Roles     []int32  `json:"roles"`
	Perms     [
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Go微服务开发是利用Go语言进行微服务架构的开发方式。在这个问题中,使用了gin、grpc和etcd进行重构grpc-todolist项目Gin是一个轻量级的Web框架,使用它可以快速构建高性能的Web应用程序。它具有简单易用、性能出色和灵活的特点。在微服务开发中,Gin可以作为HTTP服务器框架,处理和响应客户端的HTTP请求。 gRPC是一种高性能、开源的远程过程调用(RPC)框架。它支持多种编程语言,并使用带有协议缓冲区的Google Protocol Buffers进行数据交换。在微服务架构中,gRPC可以用于服务之间的通信,通过定义接口和消息格式,实现服务间的数据传输和调用。 Etcd是一个高可靠、分布式的键值存储系统。它使用Raft一致性算法来保证数据的可靠性和一致性。在微服务开发中,Etcd可以作为服务发现和配置管理的工具,用于注册和发现各个微服务的信息。 对于重构grpc-todolist项目来说,使用gin可以将原有的HTTP接口改写为更加高性能的接口,提高整个系统的性能。通过使用gRPC,可以将原有的接口定义为gRPC接口,实现服务间的高效通信,并且易于扩展和维护。同时,借助Etcd实现服务注册和发现,提高系统的可用性和灵活性。 总而言之,通过使用gin、grpc和etcd对grpc-todolist项目进行重构,可以提高系统性能、扩展性和可维护性。这种微服务开发方式能够更好地适应大规模分布式系统的需求,使得系统更加稳定和可靠。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值