iT邦幫忙

2025 iThome 鐵人賽

DAY 29
0
Modern Web

Golang x Echo 30 天:零基礎GO , 後端入門系列 第 29

以 Go + Echo 打造部落格|第 13 集 總結

  • 分享至 

  • xImage
  •  

跟著這系列的文章,你可以完成什麼?
你已經一路把後台文章管理、登入保護、圖片上傳、搜尋加速、連 Redis 快取都搞定了!

你現在手上的部落格,已經是個可以「直接上線做生意,未來還能無限擴充」的超強作品!拍手!


🧱 第 1–3 篇:先來把地基跟鋼筋打好啦!
一個網站,地基沒打穩,以後一定會「走鐘」!這三篇就是教你怎麼當一個負責任的包工頭!

開工儀式: go mod init 喊下去!把 Echo v4(伺服器)、.env(密碼本)、Makefile(一鍵啟動按鈕)全部到位!

目錄像書桌一樣整齊: 什麼東西放哪裡,分得清清楚楚!「處理要求」的丟 handlers、「放資料」的丟 postgres,清爽不雜亂!

資料庫超神氣: 用 Postgres 當倉庫,再用 pgxpool 弄個「連線池」(不然太多人來,資料庫會被擠爆)!最重要的是,用 pressly/goose 記錄資料庫的「版本紀錄」,從此**「你那台能跑,我這台不能跑」**的悲劇不再發生!

💡 踩雷快報: 忘了 +goose Up/Down 這個**「通關密語」**?你的資料庫搬家當然不會成功啊,快去補上!


✍️ 第 4 篇:後台 CRUD!真的可以寫文章了啦!
蓋好了地基,當然要來弄「管理中心」啊!

搞定後台: 做出 /admin/posts 頁面,讓你寫寫改改刪刪!

防盜鎖 CSRF: 表單一定要加防盜鎖!同時用 _method 這個「裝模作樣」的假動作,讓 HTML form 也能假裝自己會 PUT/DELETE(修改/刪除)!

基本禮儀: 標題要寫!文章網址 slug 要乖乖的!內容不能太敷衍!

💡 踩雷快報: 網址 slug 跟人家重複了?資料庫會報錯!這時候你要**「溫柔地」**告訴使用者:「請換一個網址喔!」


📰 第 5–6 篇:前台亮相!文章漂亮、壞蛋閃邊!
部落格就是要給人逛啊!這兩篇是門面擔當!

首頁規定: 首頁 / 只給「已發佈」(published = true)的文章看!還要有 ?page= 讓大家翻頁!

文章變漂亮: 寫 Markdown(純文字)沒關係!我們用 goldmark 把它變 HTML 衣服!但是,變完之後一定要用 bluemonday 好好地「洗澡過濾」一次!(這是在防 XSS!不然壞蛋會亂放惡意程式碼!)

「禮貌的消失」: 文章被刪了、或還在草稿?通通給它 404!而且這個 404 頁面,要用你自訂的漂亮模板,就算消失也要優雅!

💡 踩雷快報: 忘了 XSS 清洗?風險大到爆!bluemonday.UGCPolicy() 是你的救命仙丹!拜託必備!


🔐 第 7 篇:後台門禁森嚴!
後台是機密重地,當然要設門禁警衛!

登入流程: 登入 → 拿到 Session Cookie (「入場券」) → Middleware (「門禁警衛」) 站崗在 /admin/*!

密碼打成肉醬: 密碼用 bcrypt 加密後才存到資料庫!這樣就算資料庫被偷,密碼也沒人看得懂!

草稿隱形術: 只有登入者可以「預覽草稿」!沒登入?抱歉,請吃 404!

💡 踩雷快報: Session Cookie 的屬性,在正式環境一定要打開 HttpOnly 和 Secure!這是防被偷的!別懶惰!


🧯 第 8–9 篇:網站不會爆炸!錯誤處理與日誌!
網站 Bug 難免,但不能讓它「倒一片」!

安全氣囊 Recover(): 程式大爆炸 panic 的時候,Recover() 就是你的安全氣囊,擋住它!

偵探編號 Request ID: 每個請求都有一個 Request ID (「訂單編號」),方便你追蹤問題的來龍去脈!

統一回話: 不管成功(JSONOK)或失敗(JSONError),回覆給前端的格式要一樣!別再讓前端工程師猜你在說什麼了啦!

CORS 白名單: CORS 設好,只允許你「自己家的前端網站」來拿資料!別開 *,很危險!


🖼️ 第 10 篇:上傳圖片,想換 S3 雲端倉庫也行!
沒有圖片的部落格很無聊!

上傳守則: 圖片檔名用 UUID (獨一無二的身分證),檢查檔案大小和格式,還要擋住「路徑穿越」(不讓駭客亂跑)!

未來可換倉庫: 我們用 Storage **「介面」**來處理!一開始用 LocalStorage,未來有錢想換 S3 雲端倉庫? 沒問題!只要換掉「介面實作」就好,主程式碼不用動!超讚的彈性!

💡 踩雷快報: 圖上傳了,但頁面 404?你一定忘了把 /uploads 這個資料夾設定成「靜態文件」啦!


🌐 第 11 篇:曝光!讓 Google 和社群都看到你!
文章寫好了,沒人看?太慘了!這三樣是「被看見」的三大法寶!

/rss.xml: 讓你的忠實粉絲可以用 RSS 訂閱你的新文章!

/sitemap.xml: 給 Google 一張「你部落格的完整地圖」,讓它爬得更完整,收錄更快!

SEO meta: 設好 meta/OG/Twitter Card!這樣你的文章連結丟到 Facebook 或 Line 上,縮圖跟標題才會美美的,點擊率才會高!

💡 踩雷快報: SITE_BASE_URL (網站網址) 一定要寫「正式網域」(含 https)!不然 Google 爬到的連結會是「你家電腦的位址」,超糗!


🔎⚡️ 第 12 篇:全文搜尋 $\text{&}$ Redis 快取:跑得快、賺得多!
頂級網站都要有「速度」跟「搜尋」!

全文搜尋: 先用 ILIKE(「我猜你找這個」的模糊搜尋)頂著用!如果想快到飛起來,可以選用 pg_trgm (加速技術)!

Redis 加速器: 用 Redis 記憶體快取來加速公開 API!

聰明失效法: 用「版本號」當命名空間!後台一寫文章 → 版本號 +1 → 整個快取自動失效!超省事!

防雪崩: 用 singleflight (「一人服務」機制) 來擋住「同時找一樣東西」的請求!避免快取同時失效時,資料庫被 request 淹死!

💡 踩雷快報: Redis 掛了怎麼辦?沒事!程式要**「優雅退化」**!直接忽略快取錯誤,去查資料庫!別讓使用者發現你的秘密武器壞掉了!


🤩 最終結論:你已經是 Go 界的 Master!
恭喜你!跑完這 12 篇的精華,你已經掌握了:

🧱 穩定的骨架

🔒 安全成熟的後台

🌐 對 SEO 友善的門面

⚡️ 高速運作的效能


這不僅僅是一個部落格骨架,這是你未來開發所有「中小型後端產品」的共同基礎! 💪


上一篇
以 Go + Echo 打造部落格|第 12 集 全文搜尋 & Redis 快取
系列文
Golang x Echo 30 天:零基礎GO , 後端入門29
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言