[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-golangci-lint-v2-5-0-revive-checks-zh":3,"article-related-golangci-lint-v2-5-0-revive-checks-zh":31,"series-tools-c81b891c-6bd0-48e7-b9b0-eacbc93560f0":76},{"id":4,"slug":5,"title":6,"content":7,"summary":8,"source":9,"source_url":10,"author":11,"image_url":12,"cover_image":12,"category":13,"language":14,"translated_content":11,"related_article_id":15,"keywords":16,"key_takeaways":23,"views":27,"created_at":28,"published_at":29,"topic_cluster_id":30},"c81b891c-6bd0-48e7-b9b0-eacbc93560f0","golangci-lint-v2-5-0-revive-checks-zh","Golangci-lint v2.5.0 加入 8 項 revive 檢查","\u003Cp data-speakable=\"summary\">Golangci-lint v2.5.0 新增兩個 linter，revive 也多了八項檢查，對 Go 團隊來說是一次很實際的更新。\u003C\u002Fp>\u003Cp>說真的，這版不算花俏。它在 2025-09-21 發布，重點是把靜態分析工具補得更完整。\u003C\u002Fp>\u003Cp>如果你們 CI 早就靠 \u003Ca href=\"https:\u002F\u002Fgolangci-lint.run\u002Fdocs\u002Fproduct\u002Fchangelog\u002F\" target=\"_blank\" rel=\"noopener\">golangci-lint\u003C\u002Fa> 擋爛 code，這版很值得看。因為它不是只修小 bug，而是直接把可抓的問題類型加多了。\u003C\u002Fp>\u003Ctable>\u003Cthead>\u003Ctr>\u003Cth>項目\u003C\u002Fth>\u003Cth>變化\u003C\u002Fth>\u003Cth>備註\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>版本\u003C\u002Ftd>\u003Ctd>v2.5.0\u003C\u002Ftd>\u003Ctd>2025-09-21 發布\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>新 linter\u003C\u002Ftd>\u003Ctd>2 個\u003C\u002Ftd>\u003Ctd>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fgodoc-lint\u002Fgodoc-lint\" target=\"_blank\" rel=\"noopener\">godoclint\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FMirrexOne\u002Funqueryvet\" target=\"_blank\" rel=\"noopener\">unqueryvet\u003C\u002Fa>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>revive\u003C\u002Ftd>\u003Ctd>1.11.0 → 1.12.0\u003C\u002Ftd>\u003Ctd>新增 8 項 options\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>Go 支援\u003C\u002Ftd>\u003Ctd>Go 1.25\u003C\u002Ftd>\u003Ctd>官方列為增強\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>gofumpt\u003C\u002Ftd>\u003Ctd>0.8.0 → 0.9.1\u003C\u002Ftd>\u003Ctd>naked return 規則更清楚\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003Ch2>這版到底改了什麼\u003C\u002Fh2>\u003Cp>這次更新很像典型的維護型升級。它加了兩個新 linter，也把既有工具的規則補強。對使用者來說，這種版本通常比單純改 UI 還有感。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1782605877403-srf2.png\" alt=\"Golangci-lint v2.5.0 加入 8 項 revive 檢查\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>原因很簡單。\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fgodoc-lint\u002Fgodoc-lint\" target=\"_blank\" rel=\"noopener\">godoclint\u003C\u002Fa> 管文件品質，\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FMirrexOne\u002Funqueryvet\" target=\"_blank\" rel=\"noopener\">unqueryvet\u003C\u002Fa> 管 SQL 查詢風險。兩個方向都很務實。\u003C\u002Fp>\u003Cp>Go 團隊最怕的不是沒工具，而是工具太老。lint 如果跟不上語言版本和社群工具，最後只會變成一個裝飾品。\u003C\u002Fp>\u003Cul>\u003Cli>新增 2 個 linter。\u003C\u002Fli>\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmgechev\u002Frevive\" target=\"_blank\" rel=\"noopener\">revive\u003C\u002Fa> 加了 8 個新 options。\u003C\u002Fli>\u003Cli>支援 Go 1.25。\u003C\u002Fli>\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Furfave\u002Fcli\" target=\"_blank\" rel=\"noopener\">gofumpt\u003C\u002Fa> 也有更新。\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>revive 這次最有感\u003C\u002Fh2>\u003Cp>這版最有用的地方，還是 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmgechev\u002Frevive\" target=\"_blank\" rel=\"noopener\">revive\u003C\u002Fa> 1.12.0。它新增的八項規則，幾乎都對準真實 \u003Ca href=\"\u002Ftag\u002Fcode-review\">code review\u003C\u002Fa> 常見問題。\u003C\u002Fp>\u003Cp>像是 if\u002Felse 分支重複、switch 分支重複、package 名稱和資料夾不一致，這些都很常見。寫的人覺得沒差，review 的人看久了會很煩。\u003C\u002Fp>\u003Cp>還有 URL scheme、goroutine 與 wait group 的檢查。這些都不是炫技型規則，而是能少踩坑的東西。\u003C\u002Fp>\u003Cblockquote>\u003Cp>「Code should be written to minimize the time it would take for someone else to understand it.」— Robert C. Martin\u003C\u002Fp>\u003C\u002Fblockquote>\u003Cp>這句話放在這版很貼切。revive 新增的規則，\u003Ca href=\"\u002Fnews\u002Fazure-databricks-analytics-ai-governance-zh\">核心\u003C\u002Fa>就是減少閱讀成本，也減少後面的人幫你擦屁股。\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cstrong>identical-ifelseif-branches\u003C\u002Fstrong>：抓重複 if\u002Felse 分支。\u003C\u002Fli>\u003Cli>\u003Cstrong>identical-ifelseif-conditions\u003C\u002Fstrong>：抓重複條件。\u003C\u002Fli>\u003Cli>\u003Cstrong>identical-switch-branches\u003C\u002Fstrong>：抓重複 switch 分支。\u003C\u002Fli>\u003Cli>\u003Cstrong>package-directory-mismatch\u003C\u002Fstrong>：抓 package 和目錄不一致。\u003C\u002Fli>\u003Cli>\u003Cstrong>unsecure-url-scheme\u003C\u002Fstrong>：抓不安全的 URL scheme。\u003C\u002Fli>\u003Cli>\u003Cstrong>use-waitgroup-go\u003C\u002Fstrong>：抓 goroutine 與 wait group 用法。\u003C\u002Fli>\u003Cli>\u003Cstrong>useless-fallthrough\u003C\u002Fstrong>：抓沒意義的 fallthrough。\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>兩個新 linter，方向很明確\u003C\u002Fh2>\u003Cp>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fgodoc-lint\u002Fgodoc-lint\" target=\"_blank\" rel=\"noopener\">godoclint\u003C\u002Fa> 針對文件品質。這對\u003Ca href=\"\u002Fnews\u002Flore-binary-first-version-control-scales-zh\">大型\u003C\u002Fa> Go \u003Ca href=\"\u002Fnews\u002Fopen-source-ai-projects-developers-2026-zh\">專案\u003C\u002Fa>很重要，因為 \u003Ca href=\"\u002Ftag\u002Fapi\">API\u003C\u002Fa> 一多，文件差一點就會讓整個套件很難用。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1782605874334-4jc4.png\" alt=\"Golangci-lint v2.5.0 加入 8 項 revive 檢查\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FMirrexOne\u002Funqueryvet\" target=\"_blank\" rel=\"noopener\">unqueryvet\u003C\u002Fa> 則偏向資料庫查詢安全。講白了，它就是幫你少寫出容易出事的 query。\u003C\u002Fp>\u003Cp>這種組合很像 golangci-lint 一貫的路線。它不是單一 linter，而是把一堆實用檢查包在一起，讓 CI 一次跑完。\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cstrong>godoclint\u003C\u002Fstrong>：文件與註解品質。\u003C\u002Fli>\u003Cli>\u003Cstrong>unqueryvet\u003C\u002Fstrong>：查詢建構與 SQL 風險。\u003C\u002Fli>\u003Cli>\u003Cstrong>gosec\u003C\u002Fstrong>：安全檢查仍在持續更新。\u003C\u002Fli>\u003Cli>\u003Cstrong>err113\u003C\u002Fstrong>：錯誤處理規則也有小幅調整。\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>跟前一版比，差在哪\u003C\u002Fh2>\u003Cp>如果拿 v2.4.0 來比，v2.5.0 更像是把工具箱補齊。前一版重點在 Go 1.25 與新網站，這一版則直接把檢查內容往前推。\u003C\u002Fp>\u003Cp>對團隊來說，這種版本很實際。因為升級 lint 工具，最有價值的通常不是版本號，而是能不能多抓出幾種真問題。\u003C\u002Fp>\u003Cp>這裡有個很現實的點。lint 規則一多，CI 會更吵。可是如果規則夠準，吵歸吵，至少是在擋 bug，不是在製造雜訊。\u003C\u002Fp>\u003Cul>\u003Cli>v2.4.0：Go 1.25 支援。\u003C\u002Fli>\u003Cli>v2.4.0：網站也更新了。\u003C\u002Fli>\u003Cli>v2.5.0：新增 2 個 linter。\u003C\u002Fli>\u003Cli>v2.5.0：revive 一口氣多 8 項檢查。\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>這版放在 Go 生態裡看\u003C\u002Fh2>\u003Cp>Go 的 lint 生態一直很務實。大家要的是快、準、能塞進 CI，不是華麗展示。\u003C\u002Fp>\u003Cp>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdominikh\u002Fgo-tools\" target=\"_blank\" rel=\"noopener\">staticcheck\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fgolangci\u002Fgolangci-lint\" target=\"_blank\" rel=\"noopener\">golangci-lint\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmgechev\u002Frevive\" target=\"_blank\" rel=\"noopener\">revive\u003C\u002Fa> 這幾個工具，各自扮演不同角色。有人管語意，有人管風格，有人負責整合。\u003C\u002Fp>\u003Cp>v2.5.0 的意思很直接。它在告訴你，這套工具還在追社群需求，不是放著不動。\u003C\u002Fp>\u003Ch2>結尾：升級前先做一件事\u003C\u002Fh2>\u003Cp>如果你們團隊已經開了 revive，先把新規則設成 warning，再看 CI 會冒出多少舊問題。這樣比較不會一口氣把 pipeline 弄爆。\u003C\u002Fp>\u003Cp>我會建議先看 \u003Cstrong>identical-ifelseif-branches\u003C\u002Fstrong>、\u003Cstrong>package-directory-mismatch\u003C\u002Fstrong>、\u003Cstrong>unsecure-url-scheme\u003C\u002Fstrong> 這三項。這幾個最容易直接抓到真問題，也最容易跟團隊溝通。\u003C\u002Fp>\u003Cp>講白了，v2.5.0 不是那種會讓你驚呼的版本，但它很適合真的在寫 Go 的團隊。你們如果重視 code review 效率，這版可以排進升級清單。\u003C\u002Fp>","Golangci-lint v2.5.0 新增 2 個 linter，revive 也多了 8 項檢查，並擴充 Go 1.25 支援。","golangci-lint.run","https:\u002F\u002Fgolangci-lint.run\u002Fdocs\u002Fproduct\u002Fchangelog\u002F",null,"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1782605877403-srf2.png","tools","zh","af69202e-8810-49fc-ba85-dfd18ae1217e",[17,18,19,20,21,22],"golangci-lint","Go","revive","static analysis","CI","linter",[24,25,26],"v2.5.0 新增 2 個 linter，分別是 godoclint 和 unqueryvet。","revive 1.12.0 帶來 8 項新檢查，重點放在重複分支、package 命名、URL scheme 和 goroutine 用法。","這版也擴充 Go 1.25 支援，適合放進 Go 團隊的 CI 升級流程。",0,"2026-06-28T00:17:31.421555+00:00","2026-06-28T00:17:31.414+00:00","6706c5ce-71b1-4bef-b28a-28e17a9b0d77",{"tags":32,"relatedLang":35,"relatedPosts":39},[33],{"name":18,"slug":34},"go",{"id":15,"slug":36,"title":37,"language":38},"golangci-lint-v2-5-0-revive-checks-en","Golangci-lint v2.5.0 adds 8 revive checks","en",[40,46,52,58,64,70],{"id":41,"slug":42,"title":43,"cover_image":44,"image_url":44,"created_at":45,"category":13},"04a7998f-745f-4a4d-851b-d5888aac1000","golangci-lint-faq-ci-policy-zh","FAQ 把 golangci-lint 變 CI 政策","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1782607697597-rh2b.png","2026-06-28T00:47:53.937018+00:00",{"id":47,"slug":48,"title":49,"cover_image":50,"image_url":50,"created_at":51,"category":13},"199c5c27-7d55-46b4-a59f-fa2a9d4d6340","gorm-advanced-query-helpers-guardrails-zh","GORM 查詢助手把 SQL 變護欄","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1782606801104-8e4w.png","2026-06-28T00:32:58.617013+00:00",{"id":53,"slug":54,"title":55,"cover_image":56,"image_url":56,"created_at":57,"category":13},"7dfeee82-47b0-41bb-8a47-0ad5c9203a23","open-source-ai-projects-developers-2026-zh","2026 開發者必備 7 個開源 AI 專案","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1782593290041-l5h1.png","2026-06-27T20:47:36.429404+00:00",{"id":59,"slug":60,"title":61,"cover_image":62,"image_url":62,"created_at":63,"category":13},"032a0b15-7665-4662-a3e2-ca7d5873f4d0","midjourney-review-2026-v8-worth-it-zh","Midjourney 2026 評測：V8 還值得嗎","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1782576173444-63qz.png","2026-06-27T16:02:30.078028+00:00",{"id":65,"slug":66,"title":67,"cover_image":68,"image_url":68,"created_at":69,"category":13},"12f76440-abb5-4e5f-9b98-d12c7468652d","midjourney-v81-faster-renders-pricing-video-zh","Midjourney V8.1 4-5倍加速上線","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1782573468737-8pyt.png","2026-06-27T15:17:23.186362+00:00",{"id":71,"slug":72,"title":73,"cover_image":74,"image_url":74,"created_at":75,"category":13},"91637501-ee43-4951-b43c-ce2ba3299d3a","mlops-roadmap-2026-turns-learning-into-delivery-zh","MLOps 路線圖把學習變交付","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1782567219485-a9wf.png","2026-06-27T13:33:06.891797+00:00",[77,82,87,92,97,102,107,112,117,122],{"id":78,"slug":79,"title":80,"created_at":81},"855cd52f-6fab-46cc-a7c1-42195e8a0de4","surepath-real-time-mcp-policy-controls-zh","SurePath 推出即時 MCP 政策控管","2026-03-26T07:57:40.77233+00:00",{"id":83,"slug":84,"title":85,"created_at":86},"9b19ab54-edef-4dbd-9ce4-a51e4bae4ebb","mcp-in-2026-the-ai-tool-layer-teams-use-zh","2026 年 MCP：團隊真的在用的 AI 工具層","2026-03-26T08:01:46.589694+00:00",{"id":88,"slug":89,"title":90,"created_at":91},"af9c46c3-7a28-410b-9f04-32b3de30a68c","prompting-in-2026-what-actually-works-zh","2026 提示工程，真正有用的是什麼","2026-03-26T08:08:12.453028+00:00",{"id":93,"slug":94,"title":95,"created_at":96},"05553086-6ed0-4758-81fd-6cab24b575e0","garry-tan-open-sources-claude-code-toolkit-zh","Garry Tan 開源 Claude Code 工具包","2026-03-26T08:26:20.068737+00:00",{"id":98,"slug":99,"title":100,"created_at":101},"042a73a2-18a2-433d-9e8f-9802b9559aac","github-ai-projects-to-watch-in-2026-zh","2026 必看 20 個 GitHub AI 專案","2026-03-26T08:28:09.619964+00:00",{"id":103,"slug":104,"title":105,"created_at":106},"a5f94120-ac0d-4483-9a8b-63590071ac6a","claude-code-vs-cursor-2026-zh","Claude Code 與 Cursor 深度對比：202…","2026-03-26T13:27:14.279193+00:00",{"id":108,"slug":109,"title":110,"created_at":111},"0975afa1-e0c7-4130-a20d-d890eaed995e","practical-github-guide-learning-ml-2026-zh","2026 機器學習入門 GitHub 實用指南","2026-03-27T01:16:49.712576+00:00",{"id":113,"slug":114,"title":115,"created_at":116},"bfdb467a-290f-4a80-b3a9-6f081afb6dff","aiml-2026-student-ai-ml-lab-repo-review-zh","AIML-2026：像課綱的學生實驗 Repo","2026-03-27T01:21:51.467798+00:00",{"id":118,"slug":119,"title":120,"created_at":121},"80cabc3e-09fc-4ff5-8f07-b8d68f5ae545","ai-trending-github-repos-and-research-feeds-zh","AI Trending：把 AI 資源收成一張表","2026-03-27T01:31:35.262183+00:00",{"id":123,"slug":124,"title":125,"created_at":126},"3ce6e6e2-bac5-463e-9f8d-45caabcc61f7","awesome-ai-for-science-research-tools-map-zh","AI 科研工具清單，開始像地圖了","2026-03-27T01:46:50.521945+00:00"]