文章目录
- 前言
- 创建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)机制
总说学不学都一样,努不努力都一样,清醒一点!怎么会都一样,不过是抗争不过后幻想躺平的借口,是不甘辛苦麻痹自己的谎言,无论如何努力都无法达到别人的起点这是事实,但是单个体的纵向比较而言,怎么会都一样~