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

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

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

相关文章

QT5.14安装以及新建基础项目

进入qt中文网站:Qt | 软件开发全周期的各阶段工具 额,考虑新手可能还是找不到,我就分享一下我下载的的吧 通过网盘分享的文件:qt-opensource-windows-x86-5.14.2.exe 链接:https://pan.baidu.com/s/1yQTRp-b_ISje5B3UWb7Apw?pw…

深入解析 I/O 模型:原理、区别与 Java 实践

一、I/O 模型的核心概念 I/O 操作的本质是数据在用户空间(应用程序内存)和内核空间(操作系统内核内存)之间的传输。根据数据准备与拷贝阶段的处理方式不同,I/O 模型可分为以下五类: 阻塞 I/O(…

EMQX v5.0通过连接器和规则同步数据

1 概述 EMQX数据集成功能,帮助用户将所有的业务数据无需额外编写代码即可快速完成处理与分发。 数据集成能力由连接器和规则两部分组成,用户可以使用数据桥接或 MQTT 主题来接入数据,使用规则处理数据后,再通过数据桥接将数据发…

重构门店网络:从“打补丁“到“造地基“的跨越

您是否遇到过这样的窘境? 新店开张要等一周,就为装根网线; 偏远地区门店三天两头断网,顾客排长队却结不了账; 总部想看实时数据,结果收到一堆乱码报错; 总部ERP系统升级,2000家门…

PH热榜 | 2025-05-13

1. FirstQuadrant 标语:通过以人为本的人工智能来最大化B2B销售 介绍:销售人工智能,帮助创始人和收益团队提高效率,保持组织有序,并促成更多交易。它通过简化销售幕后工作,确保每个细节都不会遗漏。 产品…

【即插即用涨点模块】【上采样】CARAFE内容感知特征重组:语义信息与高效计算两不误【附源码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

esp32硬件支持AT指令

步骤1:下载AT固件 从乐鑫官网或Git鑫GitHub仓库(https://github.com/espressif/esp-at)获取对应ESP32型号的AT固件(如ESP32-AT.bin)。 步骤2:安装烧录工具 使用 esptool.py(命令行工具&#…

【神经网络与深度学习】局部最小值和全局最小值

引言 在机器学习和优化问题中,目标函数的优化通常是核心任务。优化过程可能会产生局部最小值或全局最小值,而如何区分它们并选择合适的优化策略,将直接影响模型的性能和稳定性。 在深度学习等复杂优化问题中,寻找全局最小值往往…

链表的面试题4之合并有序链表

这篇文章我们继续来讲链表中很经典的面试题:合并有序链表。 目录 迭代 递归 我们首先来看一下这张图片里面的要求,给你两个链表,要求把他们按照从小到大的方式排列。 这里涉及到几个问题,首先,我们的头节点是不是要…

flea-cache使用之Redis哨兵模式接入

Redis哨兵模式接入 1. 参考2. 依赖3. 基础接入3.1 定义Flea缓存接口3.2 定义抽象Flea缓存类3.3 定义Redis客户端接口类3.4 定义Redis客户端命令行3.5 定义哨兵模式Redis客户端实现类3.6 定义Redis哨兵连接池3.7 定义Redis哨兵配置文件3.8 定义Redis Flea缓存类3.9 定义抽象Flea…

OpenAI for Countries:全球AI基础设施的“技术基建革命”

2025年5月7日,OpenAI宣布启动“OpenAI for Countries”计划,目标是为全球各国构建本土化的AI基础设施,提供定制化服务。这一计划被视为其“星际之门”项目的全球化延伸,以技术合作为核心,覆盖数据中心建设、模型适配与…

Linux精确列出非法 UTF-8 字符的路径或文件名

Docker构建的时候报错:failed to solve: Internal: rpc error: code = Internal desc = grpc: error while marshaling: string field contains invalid UTF-8 1、创建一个test.sh文件 find . -print0 | while IFS= read -r -d file;

FFmpeg在Android开发中的核心价值是什么?

FFmpeg 在 Android 开发中的核心价值主要体现在其强大的多媒体处理能力和灵活性上,尤其在音视频编解码、流媒体处理及跨平台兼容性方面具有不可替代的作用。以下是具体分析: --- 1. 强大的音视频编解码能力 - 支持广泛格式:FFmpeg 支持几乎所…

自我奖励语言模型:突破人类反馈瓶颈

核心思想 自我奖励语言模型提出了一种全新的语言模型对齐范式。传统方法如RLHF或DPO依赖人类反馈数据训练固定的奖励模型,这使模型的能力受限于人类标注数据的质量和数量。论文作者认为,要实现超人类能力的AI代理,未来的模型需要突破人类反馈…

5. 动画/过渡模块 - 交互式仪表盘

5. 动画/过渡模块 - 交互式仪表盘 案例&#xff1a;数据分析仪表盘 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><style type"text/css">.dashboard {font-family: Arial…

【前端三剑客】Ajax技术实现前端开发

目录 一、原生AJAX 1.1AJAX 简介 1.2XML 简介 1.3AJAX 的特点 1.3.1AJAX 的优点 1.3.2AJAX 的缺点 1.4AJAX 的使用 1.4.1核心对象 1.4.2使用步骤 1.4.3解决IE 缓存问题 1.4.4AJAX 请求状态 二、jQuery 中的AJAX 2.1 get 请求 2.2 post 请求 三、跨域 3.1同源策略…

SQL 索引优化指南:原理、知识点与实践案例

SQL 索引优化指南&#xff1a;原理、知识点与实践案例 索引的基本原理 索引是数据库中用于加速数据检索的数据结构&#xff0c;类似于书籍的目录。它通过创建额外的数据结构来存储部分数据&#xff0c;使得查询可以快速定位到所需数据而不必扫描整个表。 索引的工作原理 B-…

typedef unsigned short uint16_t; typedef unsigned int uint32_t;

你提到的这两行是 C/C 中的类型别名定义&#xff1a; typedef unsigned short uint16_t; typedef unsigned int uint32_t;它们的目的是让代码更具可读性和可移植性&#xff0c;尤其在处理精确位数的整数时非常有用。 ✅ 含义解释 typedef unsigned short uint16_t;…

Hapi.js知识框架

一、Hapi.js 基础 1. 核心概念 企业级Node.js框架&#xff1a;由Walmart团队创建&#xff0c;现由社区维护 配置驱动&#xff1a;强调声明式配置而非中间件 插件架构&#xff1a;高度模块化设计 安全优先&#xff1a;内置安全最佳实践 丰富的生态系统&#xff1a;官方维护…

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】金融风控分析案例-10.3 风险指标可视化监控

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 PostgreSQL金融风控分析之风险指标可视化监控实战一、引言二、案例背景三、数据准备&#xff08;一&#xff09;数据来源与字段说明&#xff08;二&#xff09;数据清洗 四、…