HarmonyOS 【诗韵悠然】AI古诗词赏析APP开发实战从零到一系列(二、项目准备与后台服务搭建)

news2025/5/14 23:52:52

在开发一款面向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提供有力的技术支持。希望本文的分享能够帮助到大家,如果在开发过程中遇到问题,欢迎随时提问交流。

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

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

相关文章

【PmHub后端篇】PmHub中基于自定义注解和AOP的服务接口鉴权与内部认证实现

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

多模态AI新纪元:Vertex AI Gemini与Spring AI深度集成实践

企业级AI集成进阶:Spring AI与Vertex AI Gemini的配置与调优实战 一、前沿技术:多模态模型的企业级配置范式 在生成式AI技术快速迭代的当下,企业级应用对模型配置的精细化需求日益增长。Vertex AI Gemini作为Google推出的多模态大模型&…

开源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(含完整代码示​例与实战源)。完整介绍…

国联股份卫多多与七腾机器人签署战略合作协议

5月13日,七腾机器人有限公司(以下简称“七腾机器人”)市场部总经理孙永刚、销售经理吕娟一行到访国联股份卫多多,同卫多多/纸多多副总裁、产发部总经理段任飞,卫多多机器人产业链总经理郭碧波展开深入交流,…

WebGL 开发的前沿探索:开启 3D 网页的新时代

你是否曾好奇,为何如今网页上能呈现出如同游戏般逼真的 3D 场景?这一切都要归功于 WebGL。它看似神秘,却悄然改变着我们浏览网页的体验。以往,网页内容大多局限于二维平面,可 WebGL 打破了这一限制。它究竟凭借什么&am…

激光雷达定位算法在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…

LVGL简易计算器实战

文章目录 📁 文件结构建议🔹 eval.h 表达式求值头文件🔹 eval.c 表达式求值实现文件(带详细注释)🔹 ui.h 界面头文件🔹 ui.c 界面实现文件🔹 main.c 主函数入口✅ 总结 项目效果&…

代码随想录算法训练营第60期第三十四天打卡

大家好,我们今天的内容依旧是贪心算法,我们上次的题目主要是围绕多维问题,那种时候我们需要分开讨论,不要一起并发进行很容易顾此失彼,那么我们今天的问题主要是重叠区间问题,又是一种全新的贪心算法思想&a…

关于IDE的相关知识之二【插件推荐】

成长路上不孤单😊😊😊😊😊😊 【14后😊///计算机爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于ide插件推荐的相关内容&#xff01…

Axure RP9:列表新增

文章目录 列表新增思路新增按钮操作说明保存新增交互设置列表新增 思路 利用中继器新增行实现列表新增功能 新增按钮操作说明 工具栏中添加新增图标及标签,在图标标签基础上添加热区;对热区添加鼠标单击时交互事件,同步插入如下动作:显示/隐藏动作,设置目标元件为新增窗…

06 mysql之DML

一、什么是DML DML 用于操作数据库中的数据。主要命令包括: INSERT:添加数据SELECT:查询数据UPDATE:修改数据DELETE:删除数据 二、插入数据(INSERT) 2.1 插入单条记录 -- 插入学生记录&…

【最新版】likeshop连锁点餐系统-PHP版+uniapp前端全开源

一.系统介绍 likeshop外卖点餐系统适用于茶饮类的外卖点餐场景,搭建自己的一点点、奈雪、喜茶点餐系统。 系统基于总部多门店的连锁模式,拥有门店独立管理后台,支持总部定价和门店定价LBS定位点餐,可堂食可外卖。无论运营还是二开…

纯Java实现反向传播算法:零依赖神经网络实战

在深度学习框架泛滥的今天,理解算法底层实现变得愈发重要。反向传播(Backpropagation)作为神经网络训练的基石算法,其实现往往被各种框架封装。本文将突破常规,仅用Java标准库实现完整BP算法,帮助开发者: 1) 深入理解BP数学原理。2) 掌握面向对象的神经网络实现。3) 构建可…

海纳思(Hi3798MV300)机顶盒遇到海思摄像头

海纳思机顶盒遇到海思摄像头,正好家里有个海思Hi3516的摄像头模组开发板,结合机顶盒来做个录像。 准备工作 海纳斯机顶盒摄像机模组两根网线、两个电源、路由器一块64G固态硬盘 摄像机模组和机顶盒都接入路由器的LAN口,确保网络正常通信。 …