HarmonyOS 【诗韵悠然】AI古诗词赏析APP开发实战从零到一系列(二、项目准备与后台服务搭建)
在开发一款面向HarmonyOS平台的应用程序——【诗韵悠然】AI古诗词赏析APP时,选择了流行Go语言作为后端开发语言,并使用了go-zero微服务框架来搭建服务接口。本文将详细介绍项目准备和后台服务搭建的过程,帮助大家更好地理解和掌握go-zero框架的应用。
go-zero框架简介
go-zero 是一个集成了各种工程实践的 web 和 rpc 框架。通过弹性设计保障了大并发服务端的稳定性,经受了充分的实战检验。go-zero 框架支持多种协议,包括 RESTful API 和 RPC,适用于构建高性能的分布式系统。并且,go-zero 提供了一个强大的脚手架工具 goctl,可以一键生成 Go、iOS、Android 等多端代码,极大地提高了开发效率。
https://github.com/zeromicro/go-zero
https://go-zero.dev/
诗词内容准备
为了提供丰富的诗词内容,我们参考了多个开源项目,并从中整理出了一套数据集。原本我们打算使用 SQLite 作为本地数据库,但经过评估后发现,几百兆的数据量对本地数据库来说并不合适。因此,我们决定采用 MySQL 和 Redis 作为后台数据存储。MySQL 用于存储诗词、作者等详细信息,而 Redis 则用于缓存热点数据,提升访问速度。
数据库设计
以下是后台数据库的主要表结构设计,包括作者表、诗词表、诗人表、句子表和收藏夹表。
作者表(author)
USE `poems`;
DROP TABLE IF EXISTS `author`;
CREATE TABLE `author` (`id` bigint NOT NULL AUTO_INCREMENT,`Dynasty` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,`NAME` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,`Dsc` text COLLATE utf8mb4_general_ci,`IId` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,`BirthYear` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,`DeathYear` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,`HasImage` tinyint(1) DEFAULT '0',`create_at` timestamp NULL DEFAULT NULL,`update_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=39284 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
诗词表(poem)
CREATE TABLE IF NOT EXISTS poem (id bigint AUTO_INCREMENT,AuthorId VARCHAR(50),Intro TEXT,IId VARCHAR(50),Comment TEXT,Author VARCHAR(50),Title VARCHAR(255),Kind VARCHAR(50),Translation TEXT,Content TEXT,Dynasty VARCHAR(50),PostsCount VARCHAR(50),Annotation TEXT,create_at timestamp NULL,update_at timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (id)
)ENGINE = InnoDB COLLATE utf8mb4_general_ci;
诗人表(poet)
CREATE TABLE IF NOT EXISTS poet (id bigint AUTO_INCREMENT,image VARCHAR(255),star VARCHAR(50),name VARCHAR(50),dynasty VARCHAR(50),dsc TEXT,create_at timestamp NULL,update_at timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (id)
)ENGINE = InnoDB COLLATE utf8mb4_general_ci;
句子表(sentence)
CREATE TABLE IF NOT EXISTS sentence (id bigint AUTO_INCREMENT PRIMARY KEY,content TEXT,poetryName VARCHAR(255),poetId VARCHAR(50),poetName VARCHAR(255),poetryId VARCHAR(50),Dynasty VARCHAR(50),create_at timestamp NULL,update_at timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (id)
)ENGINE = InnoDB COLLATE utf8mb4_general_ci;
收藏夹表(collection)
CREATE TABLE IF NOT EXISTS collection (id INT AUTO_INCREMENT PRIMARY KEY,title VARCHAR(255) NOT NULL DEFAULT '',kind VARCHAR(50) NOT NULL DEFAULT '',dynasty VARCHAR(50),create_at timestamp NULL,update_at timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (id)
)ENGINE = InnoDB COLLATE utf8mb4_general_ci;
用户表(user)
CREATE TABLE user (id bigint AUTO_INCREMENT,name varchar(255) NULL COMMENT 'The username',password varchar(255) NOT NULL DEFAULT '' COMMENT 'The user password',mobile varchar(255) NOT NULL DEFAULT '' COMMENT 'The mobile phone number',gender char(10) NOT NULL DEFAULT 'male' COMMENT 'gender,male|female|unknown',nickname varchar(255) NULL DEFAULT '' COMMENT 'The nickname',type tinyint(1) NULL DEFAULT 0 COMMENT 'The user type, 0:normal,1:vip, for test golang keyword',create_at timestamp NULL,update_at timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,UNIQUE mobile_index (mobile),UNIQUE name_index (name),PRIMARY KEY (id)
) ENGINE = InnoDB COLLATE utf8mb4_general_ci COMMENT 'user table';
以上是主要的数据库设计,确保了数据的完整性和可扩展性。
MySQL和Redis数据库安装
使用Docker部署MySQL和Redis:
为了简化部署流程,我们采用了Docker来部署MySQL和Redis数据库。具体的操作步骤可以参考以下链接中的详细说明:
- 使用Docker方式一键部署MySQL和Redis数据库详解:https://blog.csdn.net/yyz_1987/article/details/145938544
使用go-zero框架搭建服务
go-zero 提供了一套完整的微服务开发流程,包括项目创建、API 定义、模型生成等。我们可以使用 goctl 工具来简化这些步骤。
go-zero入门教程:https://blog.csdn.net/yyz_1987/article/details/108367692
创建项目
首先,创建一个新的项目目录,并使用 go mod init
命令初始化项目。
cd xxx # 进入到指定的目录
go mod init myprj# 自定义一个项目名称
goctl api new myapi # 创建工作目录
go mod tidy # 自动安装扩展
定义API
使用 goctl 工具生成 API 定义文件示例。
goctl api -o open.api # 创建 open.api 文件
生成API代码
根据 API 定义文件生成相应的代码示例。
goctl api go -api open.api -dir . # 生成 API 相关代码
生成Model代码
使用 goctl 工具根据数据库的 DDL 文件生成操作数据库的代码。
goctl model mysql ddl -c -src user.sql -dir .
执行上述命令后,会在 model 目录下生成对应的数据操作代码文件,帮助我们快速实现数据的增删改查操作。
结语
通过使用 go-zero 框架和 Docker 技术,我们可以快速构建出稳定、高效的后台服务系统,为HarmonyOS平台上的【诗韵悠然】AI古诗词赏析APP提供有力的技术支持。希望本文的分享能够帮助到大家,如果在开发过程中遇到问题,欢迎随时提问交流。
相关文章:
HarmonyOS 【诗韵悠然】AI古诗词赏析APP开发实战从零到一系列(二、项目准备与后台服务搭建)
在开发一款面向HarmonyOS平台的应用程序——【诗韵悠然】AI古诗词赏析APP时,选择了流行Go语言作为后端开发语言,并使用了go-zero微服务框架来搭建服务接口。本文将详细介绍项目准备和后台服务搭建的过程,帮助大家更好地理解和掌握go-zero框架…...

【PmHub后端篇】PmHub中基于自定义注解和AOP的服务接口鉴权与内部认证实现
1 引言 在现代软件开发中,尤其是在微服务架构下,服务接口的鉴权和内部认证是保障系统安全的重要环节。本文将详细介绍PmHub中如何利用自定义注解和AOP(面向切面编程)实现服务接口的鉴权和内部认证,所涉及的技术知识点…...

多模态AI新纪元:Vertex AI Gemini与Spring AI深度集成实践
企业级AI集成进阶:Spring AI与Vertex AI Gemini的配置与调优实战 一、前沿技术:多模态模型的企业级配置范式 在生成式AI技术快速迭代的当下,企业级应用对模型配置的精细化需求日益增长。Vertex AI Gemini作为Google推出的多模态大模型&…...
大语言模型RLHF训练框架全景解析:OpenRLHF、verl、LLaMA-Factory与SWIFT深度对比
引言 随着大语言模型(LLM)参数规模突破千亿级,基于人类反馈的强化学习(RLHF)成为提升模型对齐能力的关键技术。OpenRLHF、verl、LLaMA-Factory和SWIFT作为开源社区的四大标杆框架,分别通过分布式架构、混合…...

开源AI数字人分身克隆小程序源码系统深度剖析:从搭建到应用
在人工智能与小程序生态深度融合的当下,开源 AI 数字人分身克隆小程序源码成为开发者的热门工具。从搭建基础环境到实现实际应用,这一过程涉及多项技术与复杂流程。本文将带您深入剖析开源 AI 数字人分身克隆小程序源码,揭开其从搭建到应用的…...

ETL背景介绍_1:数据孤岛仓库的介绍
1 ETL介绍 1.1 数据孤岛 随着企业内客户数据大量的涌现,单个数据库已不再足够。为了储存这些数据,公司通常会建立多个业务部门组织的数据库来保存数据。比如,随着数据量的增长,公司通常可能会构建数十个独立运行的业务数据库&am…...

Linux系统:虚拟文件系统与文件缓冲区(语言级内核级)
本节重点 初步理解一切皆文件理解文件缓冲区的分类用户级文件缓冲区与内核级文件缓冲区用户级文件缓冲区的刷新机制两级缓冲区的分层协作 一、虚拟文件系统 1.1 理解“一切皆文件” 我们都知道操作系统访问不同的外部设备(显示器、磁盘、键盘、鼠标、网卡&#…...

智能体的典型应用:自动驾驶、智能客服、智能制造、游戏AI与数字人技术
本文为《React Agent:从零开始构建 AI 智能体》专栏系列文章。 专栏地址:https://blog.csdn.net/suiyingy/category_12933485.html。项目地址:https://gitee.com/fgai/react-agent(含完整代码示例与实战源)。完整介绍…...
【技巧】使用UV创建python项目的开发环境
回到目录 【技巧】使用UV创建python项目的开发环境 0. 为什么用UV 下载速度快、虚拟环境、多版本python支持、清晰的依赖关系 1. 安装基础软件 1.1. 安装python 下载地址:https://www.python.org/downloads/windows/ 1.2. 安装UV > pip install uv -i ht…...
什么是时序数据库?
2025年5月13日,周二清晨 时序数据库(Time Series Database,TSDB)是一种专门用于高效存储、管理和分析时间序列数据的数据库系统。时间序列数据是指按时间顺序记录的数据点,通常包含时间戳和对应的数值或事件࿰…...
react父组件往孙子组件传值Context API
步骤: 创建一个 Context 在父组件中用 Provider 提供值 在孙子组件中用 useContext 消费值 // 创建 Context const MyContext React.createContext();// 父组件 const Parent () > {const value "Hello from parent";return (<MyContext.Provid…...
2025年第十六届蓝桥杯大赛软件赛C/C++大学B组题解
第十六届蓝桥杯大赛软件赛C/C大学B组题解 试题A: 移动距离 问题描述 小明初始在二维平面的原点,他想前往坐标(233,666)。在移动过程中,他只能采用以下两种移动方式,并且这两种移动方式可以交替、不限次数地使用: 水平向右移动…...

国联股份卫多多与七腾机器人签署战略合作协议
5月13日,七腾机器人有限公司(以下简称“七腾机器人”)市场部总经理孙永刚、销售经理吕娟一行到访国联股份卫多多,同卫多多/纸多多副总裁、产发部总经理段任飞,卫多多机器人产业链总经理郭碧波展开深入交流,…...
python学习笔记七(文件)
文章目录 Python 文件操作与异常处理全面指南一、文件基本知识1. 文件类型2. 文件操作基本步骤 二、文件操作1. 打开文件2. 读取文件内容3. 写入文件4. 关闭文件5. 使用with语句(推荐) 三、CSV文件操作1. 使用csv模块2. 读取CSV文件3. 写入CSV文件 四、异…...

WebGL 开发的前沿探索:开启 3D 网页的新时代
你是否曾好奇,为何如今网页上能呈现出如同游戏般逼真的 3D 场景?这一切都要归功于 WebGL。它看似神秘,却悄然改变着我们浏览网页的体验。以往,网页内容大多局限于二维平面,可 WebGL 打破了这一限制。它究竟凭借什么&am…...
高防服务器部署实战:从IP隐匿到协议混淆
1. IP隐匿方案设计 传统高防服务器常因源站IP暴露遭针对性攻击,群联通过三层架构实现深度隐藏: 流量入口层:域名解析至动态CNAME节点(如ai-protect.example.com)。智能调度层:AI模型分配清洗节点…...

激光雷达定位算法在FPGA中的实现——section3 Matlab实现和校验
1、校验section2的计算方法是否正确 以section1里面的图示 举个例子: 1.1 手动计算...

AI+可视化:数据呈现的未来形态
当AI生成的图表开始自动“美化”数据,当动态可视化报告能像人类一样“讲故事”,当你的眼球运动直接决定数据呈现方式——数据可视化的未来形态,正在撕裂传统认知。某车企用AI生成的3D可视化方案,让设计师集体失业;某医…...

[免费]微信小程序医院预约挂号管理系统(uni-app+SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序医院预约挂号管理系统(uni-appSpringBoot后端Vue管理端),分享下哈。 项目视频演示 【免费】微信小程序医院预约挂号管理系统(uni-appSpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩…...

【网络入侵检测】基于源码分析Suricata的IP分片重组
【作者主页】只道当时是寻常 【专栏介绍】Suricata入侵检测。专注网络、主机安全,欢迎关注与评论。 目录 目录 1.概要 2. 配置信息 2.1 名词介绍 2.2 defrag 配置 3. 代码实现 3.1 配置解析 3.1.1 defrag配置 3.1.2 主机系统策略 3.2 分片重组模块 3.2.1…...
Spring框架请求注解
Spring框架请求注解 1.RequestParam 作用:从请求的 查询参数(Query Parameters) 或 表单数据(Form Data) 中提取参数。适用场景: GET 请求的 URL 参数(如 /users?nameTom&age20ÿ…...

LVGL简易计算器实战
文章目录 📁 文件结构建议🔹 eval.h 表达式求值头文件🔹 eval.c 表达式求值实现文件(带详细注释)🔹 ui.h 界面头文件🔹 ui.c 界面实现文件🔹 main.c 主函数入口✅ 总结 项目效果&…...
【FMMT】基于模糊多模态变压器模型的个性化情感分析
遇到很难的文献看不懂,不应该感到气馁,应该激动,因为外审估计也看不太懂,那么学明白了可以吓唬他 缺陷一:输入依赖性与上下文建模不足 缺陷描述: 传统自注意力机制缺乏因果关系,难以捕捉序列历史背景多模态数据间的复杂依赖关系未被充分建模CNN/RNN类模型在…...
聊一聊接口测试依赖第三方服务变更时如何处理?
目录 一、依赖隔离与模拟 二、契约测试 三、版本控制与兼容性 四、变更监控与告警 五、容错设计 六、自动化测试维护 七、协作机制与文档自动化 第三方API突然改了参数或者返回结构,导致我们的测试用例失败,这时候该怎么办呢?首先想到…...

代码随想录算法训练营第60期第三十四天打卡
大家好,我们今天的内容依旧是贪心算法,我们上次的题目主要是围绕多维问题,那种时候我们需要分开讨论,不要一起并发进行很容易顾此失彼,那么我们今天的问题主要是重叠区间问题,又是一种全新的贪心算法思想&a…...
Midscene.js Chrome 插件实战:基于 AI 驱动 WEB UI 自动化测试「喂饭教程」
Midscene.js Chrome 插件实战:基于 AI 驱动 WEB UI 自动化测试「喂饭教程」 前言一、Midscene.js 简介二、环境准备与插件安装1. 安装 Chrome 插件2. 配置模型与 API Key三、插件界面与功能总览四、实战演练:用自然语言驱动网页自动化1. 典型场景一(Action):账号登录步骤一…...
JVM——方法内联之去虚化
引入 在Java虚拟机的即时编译体系中,方法内联是提升性能的核心手段,但面对虚方法调用(invokevirtual/invokeinterface)时,即时编译器无法直接内联,必须先进行去虚化(Devirtualizationÿ…...
Objective-C Block 底层原理深度解析
Objective-C Block 底层原理深度解析 1. Block 是什么? 1.1 Block 的本质 Block 是 Objective-C 中的特殊对象,实现了匿名函数的功能 通过 isa 指针继承自 NSObject,可以响应(如 copy、retain、release)等内存管理方…...

关于IDE的相关知识之二【插件推荐】
成长路上不孤单😊😊😊😊😊😊 【14后😊///计算机爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于ide插件推荐的相关内容!…...
Python+Streamlit实现登录页
PythonStreamlit实现登录页 Streamlit 是一个开源的 Python 库,专为数据科学家和机器学习工程师设计,用于快速构建交互式 Web 应用。 其核心功能与特点包括: 1.快速原型开发 2.交互式数据展示 3.极简开发 4.实时更新 5.内置组件 6.无前端依赖…...