在開發一款面向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提供有力的技術支持。希望本文的分享能夠幫助到大家,如果在開發過程中遇到問題,歡迎隨時提問交流。