v0.2.0

架構

最後更新

本頁以一張概覽圖說明 go-rss-reader 的分層與模組相依;各模組內部結構、資料流與狀態機見 doc/architecture.zh.md。

概覽

graph TB
    Main[cmd/cli main] --> App[internal/app TUI 應用層]
    App --> Collector[internal/util Collector]
    App --> Extractor[internal/util Extractor]
    App --> API[internal/api LLM 用戶端]
    App --> DB[internal/database SQLite]
    Collector --> DB
    Collector --> Feeds[(RSS 訂閱源)]
    Extractor --> Web[(新聞網頁)]
    API --> OpenAI[(OpenAI Chat Completions)]
    Collector -.-> Model[internal/model]
    Extractor -.-> Model
    DB -.-> Model

分層

層 套件 職責
進入點 cmd/cli 呼叫 app.New() 與 Run(),啟動失敗時印出錯誤
應用層 internal/app tview 版面、快捷鍵、指令解析、刷新排程,並協調下列模組
收集 internal/util(Collector) 訂閱源增刪、抓取與解析 RSS、去重、時間窗篩選
萃取 internal/util(Extractor) 抓取原始網頁並萃取標題、作者、正文、字數
LLM internal/api 串流呼叫 OpenAI Chat Completions
儲存 internal/database SQLite 路徑判斷、建表、文章/訂閱源/鍵值存取
資料模型 internal/model News、NewsContent、RSS/Channel/Item

所有套件都在 internal/ 之下,不提供可被外部 import 的 API。

跨切原則

原則 實作
UI 更新只走 tview 主執行緒 背景 goroutine 一律以 app.QueueUpdateDraw() 更新畫面
快取優先顯示 列表為空時先以 database.Get(72) 顯示,再抓網路
失敗不中斷 單一訂閱源抓取失敗、單篇萃取失敗只寫 log 並略過,不影響其他項目
單一資料檔 文章、訂閱源、API 金鑰、概要都存在同一個 SQLite 檔

延伸閱讀

EN