当前位置: 首页 > news >正文

GoAdmin代码生成器实践

文章目录

  • 前言
  • 创建SQL表格
  • 使用在线生成工具
  • 应用自动生成的代码
  • 数据变更时附加新的逻辑
  • 总结

前言

开源项目 go-admin,我一直用的是这个地址 https://github.com/GoAdminGroup/go-admin,不过最近发现了一个 Gin + Vue 版本的 go-admin,对我解决问题时的搜索造成了一定的影响,姑且不去理他,等有空再去研究一下这个新的项目,现在还是用这个老的开源项目来解决问题。

关于 go-admin 一直把它当成是一个Web服务器,用来提供表单收集请求数据,然后将请求转发到游戏服务器执行命令,其实GoAdmin是一个基于 golang 面向生产的数据可视化管理平台搭建框架,可以让你使用简短的代码在极短时间内搭建起一个管理后台,既然是管理后台,就离不开增删改查,而GoAdmin目前内置支持对主流SQL数据库(mysql/postgresql/sqlite/mssql)增删改查的管理插件,据项目介绍说非常方便,但我一直没有用过,最近想做一个定时任务管理的后台,所以用它来试一试。

首先说明一下,我今天做的这部分内容在官方文档 - Admin插件使用 都有介绍,但是像我这种没用过的选手,一开始也没发现文档这部分,都是自己摸索,最后再结合文档的描述跑通了一个例子,用这个功能前提你得先先把这个项目搭建起来,照着文档做就行了,因为我之前用了好久了,只是没用到表格维护的部分,所以这次相当于在原有的项目中扩展表格的增删改查,至于准备工作,还没搭建的小伙伴就去看看文档吧。

创建SQL表格

首先需要创建一个SQL表格,这个就是你后续用来维护的数据源,假设我们创建一个用来存储定时任务的表格 goadmin_schedule,代码如下:

mysql> CREATE TABLE `goadmin_schedule` (->   `id` int(11) unsigned NOT NULL AUTO_INCREMENT,->   `name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,->   `email` VARCHAR(100),->   `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,->   `schedule_at` timestamp NULL DEFAULT NULL,->   PRIMARY KEY (`id`)-> ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
Query OK, 0 rows affected, 1 warning (0.04 sec)mysql> show tables;
+-----------------------------+
| Tables_in_goadmindb         |
+-----------------------------+
| goadmin_menu                |
| goadmin_operation_log       |
| goadmin_permissions         |
| goadmin_role_menu           |
| goadmin_role_permissions    |
| goadmin_role_users          |
| goadmin_roles               |
| goadmin_schedule            |
| goadmin_session             |
| goadmin_site                |
| goadmin_user_permissions    |
| goadmin_users               |
+-----------------------------+
13 rows in set (0.02 sec)mysql> desc goadmin_schedule;
+-------------+--------------+------+-----+-------------------+-------------------+
| Field       | Type         | Null | Key | Default           | Extra             |
+-------------+--------------+------+-----+-------------------+-------------------+
| id          | int unsigned | NO   | PRI | NULL              | auto_increment    |
| name        | varchar(50)  | YES  |     | NULL              |                   |
| email       | varchar(100) | YES  |     | NULL              |                   |
| created_at  | timestamp    | NO   |     | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
| schedule_at | timestamp    | YES  |     | NULL              |                   |
+-------------+--------------+------+-----+-------------------+-------------------+
5 rows in set (0.04 sec)

使用在线生成工具

点击后台上方的【代码生成器】,单击【基本信息】页签,选择刚刚在数据库中创建的表格,注意要填主键,否则生成失败,包名是你想生成代码的自定义包名,导入包根据自己需要

代码生成器

然后选择【表格信息】页签,填写表格展示的内容,也是否可以编辑修改的方式

表格信息

接着选择【表单信息】页签,填写表单新增和修改的限制

表单信息

这时点击生成,即可在你第一步指定的目录下面找到生成的代码文件 goadmin_schedule.go,自动生成的代码如下:

package tablesimport ("github.com/GoAdminGroup/go-admin/context""github.com/GoAdminGroup/go-admin/modules/db""github.com/GoAdminGroup/go-admin/plugins/admin/modules/table""github.com/GoAdminGroup/go-admin/template/types/form""time"
)func GetGoadminscheduleTable(ctx *context.Context) table.Table {goadminSchedule := table.NewDefaultTable(ctx, table.DefaultConfigWithDriver("mysql"))info := goadminSchedule.GetInfo()info.HideExportButton()info.AddField("Id", "id", db.Int)info.AddField("Name", "name", db.Varchar)info.AddField("Email", "email", db.Varchar)info.AddField("Created_at", "created_at", db.Timestamp)info.AddField("Schedule_at", "schedule_at", db.Timestamp)info.SetTable("goadmin_schedule").SetTitle("定时任务").SetDescription("定时任务展示页")formList := goadminSchedule.GetForm()formList.AddField("Id", "id", db.Int, form.Default)formList.AddField("Name", "name", db.Varchar, form.Text)formList.AddField("Email", "email", db.Varchar, form.Email)formList.AddField("Created_at", "created_at", db.Timestamp, form.Datetime).FieldDisableWhenUpdate().FieldHide().FieldNowWhenInsert()formList.AddField("Schedule_at", "schedule_at", db.Timestamp, form.Datetime)formList.SetTable("goadmin_schedule").SetTitle("编辑定时任务").SetDescription("定时任务编辑页面")return goadminSchedule
}

应用自动生成的代码

将上一步生成的 goadmin_schedule.go 拷贝到项目的tables目录下,然后打开 tables.go 再其中添加我们新生成的表格代码即可:

// The key of Generators is the prefix of table info url.
// The corresponding value is the Form and Table data.
//
// http://{{config.Domain}}:{{Port}}/{{config.Prefix}}/info/{{key}}
//
// example:
//
// example end
//
var Generators = map[string]table.Generator{"schedules" : GetGoadminscheduleTable, // 新加的一行代码// generators end
}

使用 go run . 启动项目,访问 http://localhost:8080/admin/info/schedules 即可访问刚刚自动生成的代码,我们一起来看一下

新建数据

点击新建插入一条数据,返回的列表界面查看现有数据

数据展示

至此,一个 goadmin_schedule.go 的增删改查逻辑就实现完了,还是很快速方便的

数据变更时附加新的逻辑

在 GoAdmin 中,上面的代码只是完成了数据最近本的增删改查,如果想在 插入(新增)或删除任务数据时,自动执行一些逻辑(比如启动/取消定时任务),可以利用 GoAdmin 提供的 数据操作钩子(Hook)机制

GoAdmin 的每个表页面是通过一个 table.Generator 生成的,允许你注入一系列 钩子函数

操作类型Hook 方法
新增table.SetInsertFn
修改table.SetUpdateFn
删除table.SetDeleteFn

下面提供一个增加数据时启动任务的示例

taskTable.SetInsertFn(func(values form.Values) error {task := model.Task{Name:         values.Get("name")[0],Email:         values.Get("email")[0],ScheduleTime: parseTime(values.Get("schedule_at")[0]),}if err := db.Create(&task).Error; err != nil {return err}// 添加后启动任务task.Manager.Schedule(task)return nil
})

这样就能通过监听数据变化来完成自定义任务啦

总结

  • GoAdmin是一个基于 golang 面向生产的数据可视化管理平台搭建框架,可以使用简短的代码快速搭建一个管理后台
  • 如果你有一些表格需要管理,可以使用GoAdmin 提供的代码生成器来快速完成代码搭建,只需稍微调整便可以使用
  • 如果想在 插入(新增)或删除任务数据时,自动执行一些逻辑,可以利用 GoAdmin 提供的数据操作钩子(Hook)机制

==>> 反爬链接,请勿点击,原地爆炸,概不负责!<<==

总说学不学都一样,努不努力都一样,清醒一点!怎么会都一样,不过是抗争不过后幻想躺平的借口,是不甘辛苦麻痹自己的谎言,无论如何努力都无法达到别人的起点这是事实,但是单个体的纵向比较而言,怎么会都一样~

相关文章:

  • 网站页面一般做多大网站多少钱
  • 新疆建设考试信息网站seo教程培训班
  • 可以做微商的网站营销策划公司的经营范围
  • iis 网站文件被占用网络推广赚钱
  • wordpress 标题 搜索网站关键词怎么优化到首页
  • 做网站的的人收入多少钱口碑营销案例分析
  • 中断控制与实现
  • APP测试-APP启动耗时
  • Android 9.0(API 28)后字重设置
  • LeetCode热题100—— 35. 搜索插入位置
  • ubuntu22.04修改IP地址
  • 战略调整频繁,如何快速重构项目组合
  • Spring Boot整合FreeMarker全攻略
  • 基于STM32的快递箱的设计
  • 对人工智能的厌倦感是真实存在的,而且它给品牌带来的损失远不止是参与度的下降
  • Android edge-to-edge兼容适配
  • Git 子模块 (Submodule) 完全使用指南
  • 【Vue】 keep-alive缓存组件实战指南
  • AI智能化高效办公:WPS AI全场景深度应用指南
  • MySQL之SQL性能优化策略
  • LayUI的table实现行上传图片+mvc
  • PyTorch topk() 用法详解:取最大值
  • CI/CD GitHub Actions配置流程
  • mongoose解析http字段值
  • 【LLaMA-Factory 实战系列】三、命令行篇 - YAML 配置与高效微调 Qwen2.5-VL
  • 走近科学IT版:FreeBSD系统下ThinkPad键盘突然按不出b和n键了!