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)机制

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/88292.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/88292.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web布局13

在 CSS 中有很多种类型的函数&#xff0c;其中可用于尺寸属性的函数主要有 calc() 、min() 、max() 、clamp() 等。这些 CSS 函数都可用来设置网格轨道尺寸&#xff0c;除此之外&#xff0c;还有一些专门用于设置网格轨道的函数&#xff0c;比如 repeat() 、minmax() 和 fit-co…

pdf转图片(png,jpg)的python脚本

pdf转图片&#xff08;png&#xff0c;jpg&#xff09;的python脚本 PDF转图片工具 1.安装库 pip install pymupdf 2.如果需要pdf转jpg的更改DEFAULT_FORMAT即可 3.一定注意要将脚本与待转化的.pdf文件放在同一个目录 4.运行脚本&#xff0c;将脚本所在目录所有.pdf文件转…

大模型本地部署,拥有属于自己的ChatGpt

ChatGpt 以其强大的信息整合和对话能力惊艳了全球,在自然语言处理上面表现出了惊人的能力。不管用于文案撰写还是程序辅助开发都大大提高了我们的工作效率,但是其使用有一定的门槛,让我们大多数人都望而却步,今天我们利用ollama实现本地大模型的步骤,让我们轻松拥有自己的…

【mcu】-老旧小区门禁电话改造指南

老旧小区门禁电话改造指南(四线制DIY方案) 一、明确四根线的功能(关键第一步) 通常四线制门禁电话的线缆定义如下(需用万用表验证): 线色 常见功能 电压/信号类型 检测方法 红线 电源正极(+12V) DC 12V(待机) 万用表直流档测对黑线电压 黑线 电源负极(GND) 0V 与…

word中如何快速打出上标?

在 Microsoft Word 中快速输入上标的方法有以下几种&#xff0c;推荐掌握 键盘快捷键法&#xff08;最常用高效&#xff09;&#xff1a; ⭐ 方法一&#xff1a;快捷键法&#xff08;强烈推荐&#xff0c;效率最高&#xff01;&#xff09; 输入需要上标的文字/数字&#xff0…

如何优化HarmonyOS 5的分布式通信性能?

以下是针对HarmonyOS 5分布式通信性能优化的系统性方案&#xff0c;结合核心技术特性与实践经验&#xff1a; 一、传输层优化 数据压缩与批处理 // 启用ZLIB压缩&#xff08;>1KB自动压缩&#xff09; DistributedConfig config new DistributedConfig.Builder().setCom…

Matplotlib图像处理三剑客:imshow(), imread(), imsave()

Matplotlib是Python中最著名的数据可视化库之一&#xff0c;它不仅能够绘制各种统计图表&#xff0c;还提供了强大的图像处理功能。本文将重点介绍Matplotlib中三个核心的图像处理方法&#xff1a;imshow()、imread()和imsave()&#xff0c;通过示例代码展示它们的使用方法。 …

[特殊字符]防止 MyBatis-Plus 中模糊查询 `%` 查出全表:实现通配符转义拦截器

目录标题 ❓为什么需要转义 % 和 _&#x1f9ea; 使用案例&#xff1a;防止传入 % 导致全表查询&#x1f3af; 支持哪些场景&#xff1f;✅ 拦截器实现思路&#x1f9e9; 核心拦截器代码实现&#x1f510; 可选忽略某些 SQL 的转义 ❓为什么需要转义 % 和 _ 在使用 MyBatis-Pl…

linux grep的一些坑

grep -a "commit" a.log 可以获取到所有的数据&#xff08;可以看到a.log所有的commit关键词&#xff09; 但cat a.log|grep "commit" 无法全部获取到&#xff08;只能看到a.log中部分的的commit&#xff09; 细分析和可能原因&#xff1a; 1. 二进制文件…

牛客 AI 面试 Ultra 版升级:开启招聘新纪元

每到招聘季&#xff0c;HR 们便陷入繁忙与焦虑。海量简历筛选耗费大量人力&#xff0c;初步面试耗费数周时间&#xff0c;好不容易安排好面试官与候选人时间&#xff0c;又可能因各种意外状况打乱节奏。而牛客 AI 面试 Ultra 版恰似一束光&#xff0c;照亮了招聘流程优化的道路…

OSS与NAS混合云存储架构:非结构化数据统一管理实战

AI训练集管理面临的核心挑战&#xff1a;数据规模爆炸式增长与访问模式多样化的矛盾。ImageNet等典型数据集已达150TB规模&#xff0c;传统单一存储方案面临三重困境&#xff1a; NAS在PB级场景下硬件成本呈指数增长OSS对象存储无法满足高频随机访问需求跨存储数据访问导致训练…

72、单元测试-常用测试注解

72、单元测试-常用测试注解 在单元测试中&#xff0c;常用的测试注解可以帮助组织和管理测试代码&#xff0c;提高测试的可读性和可维护性。以下是JUnit和TestNG框架中一些常用的测试注解及其功能&#xff1a; #### JUnit注解 1. **Test** - 标记一个方法为测试方法。 - 可以设…

强化学习在大型语言模型训练中的最新进展:开源项目深度分析报告

强化学习在大型语言模型训练中的最新进展&#xff1a;开源项目深度分析报告 引言 近年来&#xff0c;人工智能领域见证了大型语言模型(LLM)的迅速崛起&#xff0c;而强化学习作为机器学习的重要分支&#xff0c;在提升LLM推理能力方面展现出巨大潜力。随着OpenAI发布o1等推理…

微服务:服务治理

简单描述这个过程&#xff1a; 生产者与消费者之间的供需关系仅凭这两者很难有效维持&#xff0c;比如某个消费者挂掉了&#xff0c;而生产者并不知道&#xff0c;就会依然给挂掉的消费者提供内容&#xff0c;那么此时的内容明显就是未获取到的&#xff0c;从而出现输出问题。…

关于数据编码、进制、位运算的详细讲解(从属GESP三级)

本章内容 数据编码基础 进制转换 位运算基础 别让符号位绊住你的步伐&#xff0c;掌握补码&#xff0c;让加减法都成为加法。 一、 数据编码基础 目标&#xff1a;掌握 原码 / 反码 / 补码 的定义与互转、常见进制&#xff08;2 / 8 / 10 / 16&#xff09;互化方法&#x…

实战项目8(11)

任务场景一 按照下图完成网络拓扑搭建和配置 任务要求&#xff1a; 1、根据个人模拟器情况&#xff0c;将各交换机的MAC地址标注在拓扑图中&#xff0c;并将结果进行截图。 把每个交换机的这个复制粘贴出来【如上图绿色标记的】 【SW1】配置 dis stp 【SW2】配置 dis stp 【…

储能系统的离网,并网,构网,跟网 简介

一、并网&#xff08;Grid-Connected&#xff09; ✅ 定义&#xff1a;PCS输出与公共电网并联运行&#xff0c;电网主导电压和频率&#xff0c;PCS按设定的有功/无功功率注入电网。 ✅ 特点&#xff1a; 电网存在、电压频率稳定 PCS仅作为电源“从机”&#xff0c;不能主导电压…

Solr 初始环境搭建(Windows)

前言 Apache Solr 是一个开源的、基于 Java 的企业级搜索平台&#xff0c;构建在 Apache Lucene 之上&#xff0c;提供了强大的全文检索、分布式搜索、索引管理、高亮显示、分面搜索等功能。它被广泛应用于电子商务、内容管理系统&#xff08;CMS&#xff09;、数据分析和大规模…

系统架构设计的全方位视角:深入解析4+1视图模型及其应用实践

在当今复杂多变的软件开发环境中&#xff0c;如何全面把握系统架构&#xff0c;满足不同利益相关者的需求&#xff0c;是每位架构师面临的重大挑战。“41”视图模型作为一种经典的架构描述框架&#xff0c;为解决这一难题提供了系统化的方法论。本文将深入剖析这一模型的理论基…

vue.js 3: markmap using typescript

在项目目录文件下&#xff0c;通过cmd运行下述指令。 npm create vuelatest cd vue-projectnpm installnpm run format npm run dev或 npm init vuelatest cd vue-prjectnpm run build --打包项目创建项目没有node_modules npm init -y npm install vue-routernpm install mark…