拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

HelloGitHub 第 54 期精读:34 个开源项目全景解读与上手实践

HelloGitHub 第 54 期精读:34 个开源项目全景解读与上手实践
  • 技术博客
  • 文档
  • 知识库

【免费下载链接】HelloGitHub

:octocat: 分享 GitHub 上有趣、入门级的开源项目。Share interesting, entry-level open source projects on GitHub.

项目地址:https://gitcode.com/GitHub_Trending/he/HelloGitHub
点击查看免费下载

兴趣是最好的老师,HelloGitHub让你对开源感兴趣!本文以 HelloGitHub 第 54 期月刊 为蓝本,系统梳理当期收录的 34 个跨语言、跨领域的开源项目,完整保留原刊中的配置示例、命令行操作与代码片段,并结合仓库内的生成脚本剖析月刊的产出机制。读完本文,你将掌握从事件通知库、Web 框架到机器学习、桌面工具等一系列项目的选型要点与最小上手路径,并能理解 HelloGitHub 月刊"每月 28 号更新"背后的内容生产线。

HelloGitHub 是一份每月 28 号定期发布的 GitHub 开源项目精选月刊,内容涵盖有趣、入门级的开源项目、开源书籍、实战项目与企业级项目。第 54 期共收录 34 个项目,按 C、C#、C++、CSS、Go、Java、JavaScript、Kotlin、Python、Rust、Swift、人工智能、其它、开源书籍等板块组织,几乎每个板块都附有可直接运行或阅读的代码示例。本文按板块逐项解读,并在最后结合仓库内的 make_content.py 与 github_bot.py 说明这套月刊是如何被持续生产出来的。

一、C 与 C#:事件驱动与机器学习入门

1. libevent:跨平台事件通知库

本期 C 板块收录了 libevent,一个用 C 语言实现的轻量级、高性能事件通知库。它基于事件驱动模型,屏蔽了各操作系统底层 I/O 多路复用机制的差异——包括 epoll、poll、select、kqueue 等——对外提供统一、更高级的 API,从而解决跨平台问题。对于需要编写高并发网络服务的开发者来说,libevent 是理解"事件循环 + 非阻塞 I/O"这一经典模型的最佳起点之一。

2. dotnet-docker:.NET Core 官方 Docker 镜像

dotnet-docker 提供 .NET Core 及配套 Tools 的官方 Docker 镜像。在容器化部署日渐普及的今天,它保证了 .NET 应用在不同环境中的一致运行,适合需要快速搭建 .NET CI/CD 流水线的团队。

3. machinelearning:微软开源的 C# 机器学习框架

machinelearning(ML.NET)是微软开源的 C# 机器学习框架,支持分类、回归、聚类等常见任务,并配有官方教程和视频。原刊给出了一个完整的文本情感分析示例,从加载 CSV 数据到训练二分类模型再到在线预测,全流程仅十余行代码:

var dataPath = "sentiment.csv"; var mlContext = new MLContext(); var loader = mlContext.Data.CreateTextLoader(new[] { new TextLoader.Column("SentimentText", DataKind.String, 1), new TextLoader.Column("Label", DataKind.Boolean, 0), }, hasHeader: true, separatorChar: ','); var data = loader.Load(dataPath); var learningPipeline = mlContext.Transforms.Text.FeaturizeText("Features", "SentimentText") .Append(mlContext.BinaryClassification.Trainers.FastTree()); var model = learningPipeline.Fit(data); var predictionEngine = mlContext.Model.CreatePredictionEngine<SentimentData, SentimentPrediction>(model); var prediction = predictionEngine.Predict(new SentimentData { SentimentText = "Today is a great day!" }); Console.WriteLine("prediction: " + prediction.Prediction);

这段代码清晰地展示了 ML.NET 的四个核心环节:MLContext作为一切操作的入口;CreateTextLoader定义数据列的 schema(第 1 列 Label 为布尔标签,第 2 列 SentimentText 为文本特征);FeaturizeText将文本转换为特征向量后接入FastTree二分类训练器;最后用CreatePredictionEngine创建预测引擎完成单条样本推断。对于希望在不离开 .NET 生态的前提下引入机器学习的团队,这是一个零迁移成本的选择。

二、C++ 与 CSS:高性能 Web 与趣味学习

4. drogon:C++ 异步非阻塞 Web 框架

drogon 是一款 C++ 的异步非阻塞高性能 Web 框架,功能强大、上手容易,使 C++ 构建各类高性能 Web 应用变得更加方便。原刊给出了一个最小可运行的 HTTP 服务示例,通过链式调用完成配置:

#include <drogon/drogon.h> using namespace drogon; int main() { app().setLogPath("./") .setLogLevel(trantor::Logger::kWarn) .addListener("0.0.0.0", 80) .setThreadNum(16) .enableRunAsDaemon() .run(); }

其中setLogPath("./")指定日志输出目录、setLogLevel(trantor::Logger::kWarn)将日志级别设为 Warn(降低生产环境噪音)、addListener("0.0.0.0", 80)监听所有网卡的 80 端口、setThreadNum(16)配置 16 个工作线程、enableRunAsDaemon()以守护进程方式运行。这五步即构成一个生产可用的服务骨架,是理解 drogon 配置面的最小范例。

5. css-diner:游戏化学习 CSS 选择器

css-diner 通过游戏方式在线教授 CSS 选择器知识。初学者借助简单的动画界面,可以直观理解多种选择器语法如何筛选页面元素。虽然是英文网站,但交互式关卡设计使其通俗易懂,支持在线尝试,适合作为前端入门的第一堂趣味课。

三、Go 板块:权限系统、微服务与实用工具

6. go-admin:Gin + Vue 前后端分离权限系统

go-admin 是基于 Gin + Vue + Element UI 的前后端分离权限管理系统,文档齐全、配有视频教程,适合新手学习。其核心特点包括:

  • 遵循 RESTful API 设计规范
  • 基于 Gin Web API 框架,提供丰富的中间件支持(用户认证、跨域、访问日志、追踪 ID 等)
  • 支持 Swagger 文档

对于需要快速搭建带权限控制的中后台系统、或希望学习 Go 服务端工程化实践的开发者,go-admin 是一个结构清晰的参考实现。

7. go-micro:Go 插件化微服务基础框架

go-micro 是一款 Go 插件化的基础框架,基于它可以快速构建微服务。其"插件化"设计意味着服务发现、负载均衡、消息编解码等组件均可替换,适合对微服务架构做二次定制的团队。

8. now:Go 时间工具库

now 是 Go 语言的时间工具库,项目简单、代码易懂,示例代码丰富。原刊完整给出了"时间段起点/终点"系列 API 的用法,默认以周日为一周起点:

import "github.com/jinzhu/now" time.Now() // 2013-11-18 17:51:49.123456789 Mon now.BeginningOfMinute() // 2013-11-18 17:51:00 Mon now.BeginningOfHour() // 2013-11-18 17:00:00 Mon now.BeginningOfDay() // 2013-11-18 00:00:00 Mon now.BeginningOfWeek() // 2013-11-17 00:00:00 Sun now.BeginningOfMonth() // 2013-11-01 00:00:00 Fri now.BeginningOfQuarter() // 2013-10-01 00:00:00 Tue now.BeginningOfYear() // 2013-01-01 00:00:00 Tue now.WeekStartDay = time.Monday // Set Monday as first day, default is Sunday now.BeginningOfWeek() // 2013-11-18 00:00:00 Mon now.EndOfMinute() // 2013-11-18 17:51:59.999999999 Mon now.EndOfHour() // 2013-11-18 17:59:59.999999999 Mon now.EndOfDay() // 2013-11-18 23:59:59.999999999 Mon now.EndOfWeek() // 2013-11-23 23:59:59.999999999 Sat now.EndOfMonth() // 2013-11-30 23:59:59.999999999 Sat now.EndOfQuarter() // 2013-12-31 23:59:59.999999999 Tue now.EndOfYear() // 2013-12-31 23:59:59.999999999 Tue now.WeekStartDay = time.Monday // Set Monday as first day, default is Sunday now.EndOfWeek() // 2013-11-24 23:59:59.999999999 Sun

值得注意的细节是WeekStartDay全局变量:默认值为周日,但可以改为time.Monday,此后BeginningOfWeek/EndOfWeek的计算基准会随之变化。这种"以配置变量控制时间边界"的设计在统计报表、定时任务等场景中非常实用。

9. pgweb:跨平台 PostgreSQL 管理工具

pgweb 是基于 Go 实现的跨平台 PostgreSQL 数据库管理工具,通过"本地起服务 + 浏览器访问"的方式解决跨平台问题。原刊给出了三种连接方式的启动命令:

三种方式: 参数:pgweb --host localhost --user myuser --db mydb URL:pgweb --url postgres://user:password@host:port/database?sslmode=[mode] Socket:pgweb --url "postgres:///database?host=/absolute/path/to/unix/socket/dir"
  • 参数方式:通过--host、--user、--db分别指定主机、用户名与数据库,适合最简单的本地连接;
  • URL 方式:用标准 PostgreSQL 连接串,sslmode可取值如disable、require、verify-full等,控制 SSL 行为;
  • Socket 方式:连接 Unix socket 目录下的数据库,适合本地开发或受限网络环境。

三种方式覆盖了开发、测试与生产环境的大多数连接诉求,且无需安装图形客户端,浏览器即 UI。

四、Java 板块:支付系统与文档工具

10. roncoo-pay:开源互联网业务支付系统

roncoo-pay 是开源的 Java 互联网业务支付系统,拥有独立的账户体系、用户体系、支付接入体系、支付交易体系、对账清结算体系等,是学习支付相关技术的重要参考。原刊给出了完整的项目结构,十个模块职责清晰:

roncoo-pay | ├── roncoo-pay-app-notify //商户通知模块 | ├── roncoo-pay-app-order-polling //订单轮询模块 | ├── roncoo-pay-app-reconciliation //交易对账模块 | ├── roncoo-pay-app-settlement //交易结算模块 | ├── roncoo-pay-common-core //公共基础模块,不需要单独部署 | ├── roncoo-pay-service //核心业务模块,不需要单独部署 | ├── roncoo-pay-web-boss //运营后台模块 | ├── roncoo-pay-web-gateway //支付网关模块 | ├── roncoo-pay-web-merchant //商户后台模块 | ├── roncoo-pay-web-sample-shop //模拟商城模块

从结构可以推断,这是一个典型的多模块 Maven 工程:common-core与service作为底层基础模块被复用而不单独部署;app-*四个模块分别承担异步通知、订单轮询、对账与结算等后台任务;web-*三个模块面向运营、网关与商户三类角色;web-sample-shop则是用于演示的模拟商城。理解这套模块划分,就基本理解了互联网支付系统的核心业务边界。

11. screw:数据库表结构文档生成工具

screw 是简单好用的数据库表结构文档生成工具,适用于需要为已有数据库快速沉淀设计文档的团队,可直接生成可阅读的表格文档,减少手工维护文档的成本。

五、JavaScript 板块:图标、思维导图与 OCR

12. IconPark:可主题化的 SVG 图标库

IconPark 提供 1200+ 高质量图标,并带有可视化定制界面。其强大之处在于:可以通过改变一个 SVG 文件的属性变换出多种主题风格,并支持导出 SVG、PNG、Vue 与 React 图标组件。设计师调整风格后开发者可直接复用对应组件,极大提升了设计到开发的交付效率。

13. mind-elixir-core:免费开源的思维导图 JS 库

mind-elixir-core 是一款免费开源的思维导图 JS 库,可嵌入 Web 应用实现脑图编辑能力,支持在线尝试,适合需要自建笔记、规划类产品的开发者。

14. next:企业级中后台 UI 解决方案

next 是一套企业级中后台 UI 解决方案,致力于解决设计师与前端在协同、产品体验一致性、开发效率方面的问题。其核心工作流是:设计师修改颜色等设计变量后生成一个 NPM 主题包,前端拿到该包即可直接还原设计稿,从而在"设计变量 → 主题包 → 前端消费"之间建立一条自动化链路。

15. tesseract.js:浏览器端的文字识别库

tesseract.js 是基于 Tesseract OCR 引擎的 JS 版本,支持多种语言的文字识别,能够方便、准确地把图片中的文字解析提取出来(进而可复制)。由于可在浏览器中直接运行,前端无需后端介入即可实现图片文字识别功能,支持在线尝试,适合表单识别、截图取词等场景。

六、Kotlin 与 Python:移动端组件与学习资源

16. DateTimePicker:可 100% 自定义的日期时间选择器

DateTimePicker 是简约、漂亮的日期时间选择器,支持 100% 自定义 UI,内置的日期时间选择弹窗基于 Google BottomSheetDialog,适合 Android 端需要高度定制弹窗样式的场景。

17-18. 两本 Python 学习资料

  • Computer-Networking-A-Top-Down-Approach-NOTES:经典教材《计算机网络-自顶向下方法》的编程作业整理,包含问题与 Python 代码解答,Wireshark 实验部分为官方文档的中文翻译,是计算机网络课程配套的实战宝典;
  • learn-python3:以 Jupyter notebooks 形式呈现的 Python3 教程,便于边运行边阅读,且包含练习题,对新手友好(教程为英文)。

19. livebox:全栈直播聚合平台

livebox 是一个网络直播聚合平台,可观看视频直播、高清电视、收听广播电台等,覆盖 30+ 视频直播、50+ 高清电视频道和 70+ 广播电台。其技术栈横跨前端与后端:

  • 前端/客户端:Qt、Vue、Flutter 等
  • 后端:MySQL、Redis、Kafka/RabbitMQ、Elasticsearch 等

多客户端 + 消息队列 + 全文检索的组合,使其成为学习全栈架构的良好范例。

20. readthedocs.org:知名文档社区的开源实现

readthedocs.org 是知名文档社区网站(readthedocs.org)的开源源码,该网站托管了 Scrapy、requests、bootstrap-datepicker 等知名库的文档。项目基于 Django 开发,文件较多,适合想研究"文档托管平台"这类业务如何用 Django 落地的开发者。

21. taichi:用 Python 语法写着色器

taichi 是高性能图形学编程框架,可将 Python 代码编译为高效的机器码,在多 CPU 和 GPU 上运行,相当于用 Python 语法写"着色器"。它解决了图形学配环境难、代码移植性差的问题,只需pip install taichi即可安装,程序在 Windows、Linux、OSX 上均可运行,显著降低了新手学习图形学的门槛。

原刊给出了一个完整的 Julia 集(Julia Set)渲染示例,是理解 Taichi 编程模型的最佳最小样例:

import taichi as ti ti.init(arch=ti.gpu) # 指定编译后的函数在 GPU 上执行 n = 320 pixels = ti.field(dtype=float, shape=(n * 2, n)) # 提前声明数组存储类型,大小 @ti.func # 该函数将是被调用的过程函数 def complex_sqr(z): return ti.Vector([z[0]**2 - z[1]**2, z[1] * z[0] * 2]) @ti.kernel # 该函数将被 Taichi 编译 def paint(t: float): for i, j in pixels: # 最外层循环会自动并行化 c = ti.Vector([-0.8, ti.cos(t) * 0.2]) z = ti.Vector([i / n - 1, j / n - 0.5]) * 2 iterations = 0 while z.norm() < 20 and iterations < 50: # 其他语法和原生 Python 基本一致 z = complex_sqr(z) + c iterations += 1 pixels[i, j] = 1 - iterations * 0.02 gui = ti.GUI("Julia Set", res=(n * 2, n)) for i in range(1000000): paint(i * 0.03) gui.set_image(pixels) gui.show()

代码中三个关键概念值得展开:

  • ti.init(arch=ti.gpu):初始化计算后端,指定编译后的 kernel 在 GPU 上执行(也可选择 CPU 后端);
  • ti.field:提前声明带类型的全局数组(这里是float、形状(640, 320)),Taichi kernel 直接读写该存储;
  • @ti.kernel与@ti.func:@ti.kernel标记的函数会被 Taichi 编译并可在顶层循环中并行化(for i, j in pixels自动展开为并行循环),@ti.func则标记只能在 kernel 内部调用的过程函数,二者组合构成了"数据并行"的编程模型。

最后通过ti.GUI创建窗口,以每帧 0.03 的步进参数驱动paint,并持续set_image/show,即可得到动态的 Julia 集动画。对于想接触 GPU 计算又不想深陷 C++ 生态的读者,这是非常友好的入口。

七、Rust 与 Swift:闯关式学习与照片选择

22. rustlings:闯关式 Rust 语法练习

rustlings 通过一个个简单的小练习让初学者学习 Rust 语法:安装后逐个修改练习文件,达到编译通过或目标输出即进入下一关,带有闯关成就感。原刊给出了完整的安装与运行方法:

安装: git clone https://github.com/rust-lang/rustlings cd rustlings git checkout tags/4.0.0 # or whatever the latest version is (find out at https://github.com/rust-lang/rustlings/releases/latest) cargo install --force --path . 安装完后,运行: rustlings watch

其中git checkout tags/4.0.0用于锁定到发布版本(原刊提示以最新 release 为准),cargo install --force --path .从源码编译安装 CLI,随后执行rustlings watch进入自动检测练习状态的交互模式——每当你保存修改,它会立即反馈编译结果并推进关卡。

23. ZLPhotoBrowser:轻量级照片选择框架

ZLPhotoBrowser 是轻量级照片选择框架,使用简单、功能丰富,支持预览、相册内拍照与录视频、拖拽/滑动选择、编辑裁剪图片/视频等功能。原刊给出了两种调用入口的示例代码:

// 使用起来非常简单 let ac = ZLPhotoPreviewSheet() ac.selectImageBlock = { [weak self] (images, assets, isOriginal) in // your code } // 快速选择方法 ac.showPreview(animate: true, sender: self) // 进入相册选择方法 ac.showPhotoLibrary(sender: self)

ZLPhotoPreviewSheet是入口控制器,selectImageBlock是选择完成后的回调闭包(回传图片、资源对象与原图标记),而showPreview(animate:sender:)与showPhotoLibrary(sender:)分别对应"预览快速选择"与"进入完整相册"两种交互路径,开发者可按需求灵活选用。

八、人工智能:CV 实践、NSFW 过滤与对对联

24. computervision-recipes:计算机视觉最佳实践

computervision-recipes 是微软出品的计算机视觉系统最佳实践集合,包含各种 CV 示例项目。示例使用 PyTorch 深度学习库 + Jupyter 文件,涵盖图像分类、相似度、识别、追踪等方向,适合对图像处理感兴趣的读者按"配方"式文档逐步实践。

25. nsfw-filter:浏览器端 NSFW 图片过滤插件

nsfw-filter 是基于 TensorFlow.js 实现的浏览器插件,用于过滤 NSFW(裸露、暴力等)图片。由于推理完全在浏览器内完成,无需上传图片,兼顾了隐私与实时性,是边缘端 AI 应用的典型示例。

26. seq2seq-couplet:深度学习写对联

seq2seq-couplet 是基于深度学习的对对联项目:给出上联,自动生成下联。它本质上是经典的 seq2seq 序列生成任务在中文格律文本上的应用,支持在线尝试,是理解"序列到序列 + 文本生成"的趣味入口。

九、其它与开源书籍:博客、编辑器与经典翻译

27. Halfrost-Field:资深工程师技术博客

Halfrost-Field 是前阿里巴巴资深后端工程师"霜神"的技术博客,分享前后端技术干货。作者日常使用 Go,此前有数年前端经验,文章内容覆盖机器学习、Go、JS、iOS、网络协议等系列,适合想系统跟进某一技术专题的读者。

28. hexo-theme-matery:Material Design 风格的 Hexo 主题

hexo-theme-matery 是一款采用 Material Design 和响应式设计的 Hexo 博客主题,其特性包括:

  • 响应式设计,在桌面端、平板、手机等设备上均有良好展现
  • 首页轮播文章,以及每天动态切换 Banner 图片
  • 时间轴式的归档页
  • 词云的标签页和雷达图的分类页
  • 丰富的关于我页面(关于我、文章统计图、我的项目、我的技能、相册等)
  • 支持文章置顶和文章打赏

对 Hexo 用户而言,这是一套开箱即用且视觉完成度较高的主题方案。

29. highlight.js:网页代码高亮库

highlight.js 让网页上的代码实现语法高亮,支持多种编程语言和样式,使用简单。原刊给出了三行核心引入方式:

<link rel="stylesheet" href="/path/to/styles/default.css"> <script src="/path/to/highlight.min.js"></script> <script>hljs.initHighlightingOnLoad();</script> <pre><code>...</code></pre>

default.css提供默认配色,highlight.min.js为压缩后的核心库,hljs.initHighlightingOnLoad()在页面加载后自动扫描并高亮<pre><code>中的代码块。它也正是本文这类技术博客/文档站最常用的代码展示基础设施。

30. L-ink_Card:自制迷你 NFC 智能卡

L-ink_Card 包含制作一个迷你 NFC 智能卡的完整代码与教程,配合作者"野生钢铁侠"稚晖的演示视频,是硬件爱好者复刻"极客卡片"的绝佳 DIY 项目,涵盖硬件电路、固件与配套 App 的完整链路。

31. lite:300KB 级别的 Lua 文本编辑器

lite 是一款用 Lua 编写的超级轻量级文本编辑器,Windows 下的 exe 仅约 300KB,却具备不俗的颜值、功能与速度,还支持自定义插件、配色主题等功能,是"小而美"工具的代表作。

32. ntfstool:macOS 上的 NTFS 读写工具

ntfstool 为苹果电脑提供 NTFS 读写支持,安装后即可在 macOS 上读写从 Windows 系统拷贝数据的 U 盘和移动硬盘,官方提供了安装说明,解决 macOS 默认只读 NTFS 的痛点。

33-34. 两本开源书籍

  • jshistory-cn:《JavaScript 20 年》中文版,梳理 JavaScript 语言二十年的演进脉络,支持在线阅读;
  • trpl-zh-cn:《Rust 程序设计语言(第二版)》中文翻译,即 Rust 官方 "The Book" 的中文社区译本,支持在线阅读,是系统学习 Rust 的标准读物。

十、附:HelloGitHub 月刊的"生产线"

理解了第 54 期的内容,再回到仓库本身,可以看到这套月刊并非纯手工排版,而是有配套工具链支撑的:

  • 内容生成:make_content.py 是月刊生成脚本。它通过模板替换的方式工作:脚本中定义了CONTENT_FLAG = '{{ hello_github_content }}'与NUM_FLAG = '{{ hello_github_num }}'两个占位符,读取当期content{num}.md后将其替换进模板,产出完整的HelloGitHub{num}.md。其设计动机在脚本说明中写得很清楚:所有期刊共用同一模板,若通用部分(如页脚、赞助位)需要修改,只需改模板并重新生成,而无需逐期手动编辑。命令行用法为python make_content.py 期数(如54),传入all则重新生成全部期刊,且需在项目根目录运行,详见 make_content/README.md;
  • 项目收集:github_bot 脚本用于收集 GitHub 上优秀的项目,供编写月刊使用。它通过调用 GitHub API 获取所关注用户 star 的项目,按 star 数量从高到低过滤,并支持定时发邮件汇总。运行前需在 github_bot.py 中配置 GitHub 账号(ACCOUNT)、发送邮箱(MAIL,默认 SMTP 为smtp.qq.com:465)与接收邮箱(RECEIVERS),随后执行pip install -r requirements.txt && python github_bot.py。

从"bot 收集线索"到"脚本生成月刊",再配合每月 28 号在公众号与官网同步发布,构成了 HelloGitHub 完整的内容生产闭环。这也意味着,content/HelloGitHub54.md 这类期刊文件在仓库中承担着"内容源 + 历史归档"的双重角色,任何一期都可通过上述脚本的模板机制被重新渲染。

结语

第 54 期的 34 个项目覆盖了从系统编程(libevent、drogon)到机器学习(ML.NET、taichi、seq2seq-couplet)、从开发工具(pgweb、screw、now)到学习资源(rustlings、learn-python3、开源书籍翻译)的完整光谱。每个板块的代码示例与命令行片段都可以直接作为上手的第一步;而理解其背后的月刊生成机制,则能让你以"内容生产"的视角看待开源社区的信息沉淀方式。感兴趣的话,可以继续翻阅仓库内相邻期号(如上一期 HelloGitHub53.md)对比选题脉络,或通过 make_content.py 亲手重新生成一期月刊,体验这条开源内容生产线。

  • 技术博客
  • 文档
  • 知识库

【免费下载链接】HelloGitHub

:octocat: 分享 GitHub 上有趣、入门级的开源项目。Share interesting, entry-level open source projects on GitHub.

项目地址:https://gitcode.com/GitHub_Trending/he/HelloGitHub
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

返回列表