[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-go-126-stack-allocation-gc-overhead-zh":3,"article-related-go-126-stack-allocation-gc-overhead-zh":28,"series-industry-024a31dd-0d62-441d-aee8-59417b4bc8b8":84},{"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":11,"views":25,"created_at":26,"published_at":27,"topic_cluster_id":11},"024a31dd-0d62-441d-aee8-59417b4bc8b8","go-126-stack-allocation-gc-overhead-zh","Go 1.26 讓 slice 更少上 heap","\u003Cp>Go 1.25 和 Go 1.26 做了一件很務實的事。它們讓更多 slice 留在 stack 上。這代表 GC 要掃的 heap 變少，服務延遲也可能更穩。\u003C\u002Fp>\u003Cp>更有趣的是，Go 1.26 甚至能把一些最後會逃逸的 slice 先放在 stack。這種編譯器調整不會吵著要你升級架構。它只會默默省掉一些背景工作。\u003C\u002Fp>\u003Cp>這週的 \u003Ca href=\"https:\u002F\u002Fgolangweekly.com\u002Flatest\" target=\"_blank\" rel=\"noopener\">Golang Weekly\u003C\u002Fa> 也很有料。\u003Ca href=\"https:\u002F\u002Fwww.jetbrains.com\u002Fgo\u002Fwhatsnew\u002F\" target=\"_blank\" rel=\"noopener\">GoLand 2026.1\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fjackc\u002Fpgx\" target=\"_blank\" rel=\"noopener\">pgx 5.9\u003C\u002Fa>，還有 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fncruces\u002Fgo-sqlite3\" target=\"_blank\" rel=\"noopener\">go-sqlite3\u003C\u002Fa> 更新，都在同一週冒出來。說真的，這很像 Go 圈子在集體做體質管理。\u003C\u002Fp>\u003Ch2>Go 1.26 把更多 slice 留在 stack\u003C\u002Fh2>\u003Cp>先講重點。Go 的 GC 壓力，很多時候不是大物件造成的。反而是大量短命 slice，像 request handler、parser、JSON 轉換、字串切片，這些小東西一直生一直死。數量一多，GC 就得跟著忙。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1775178768272-g7oq.png\" alt=\"Go 1.26 讓 slice 更少上 heap\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>Go 1.25 和 1.26 的改進，就是把更多 slice 直接放在 stack。這樣一來，heap allocation 變少，GC 要追的東西也少。對高流量服務來說，這種變化通常比「平均 latency 降了幾毫秒」更有感。因為 tail latency 才是使用者會抱怨的地方。\u003C\u002Fp>\u003Cp>Go 1.26 還多做了一步。某些最後會 escape 到 heap 的 slice，也能先在 stack 上完成前段工作。講白了就是，編譯器先幫你做便宜的事，再把需要活更久的資料搬走。這不是魔法，是編譯器對生命週期判斷更準了。\u003C\u002Fp>\u003Cp>如果你有在看 pprof，這種優化很容易對上症狀。allocation count 下降，GC CPU 下降，request 尖峰時的抖動也可能變小。當然，實際效果還是要看你的程式型態。不是每個專案都會賺到同樣幅度。\u003C\u002Fp>\u003Cul>\u003Cli>Go 1.25 和 1.26 都強化了 slice 的 stack allocation。\u003C\u002Fli>\u003Cli>Go 1.26 連部分會 escape 的 slice 也能先放 stack。\u003C\u002Fli>\u003Cli>heap allocation 少，GC 背景工作通常也少。\u003C\u002Fli>\u003Cli>這類優化對 tail latency 常比平均值更有感。\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>名字、錯誤訊息，還有那些省時間的小事\u003C\u002Fh2>\u003Cp>這週我也想提一下 \u003Ca href=\"https:\u002F\u002Fwww.alexedwards.net\u002Fblog\u002Fgo-naming-conventions\" target=\"_blank\" rel=\"noopener\">Alex Edwards 的 Go naming guide\u003C\u002Fa>。這篇不是什麼炫技內容，但很實用。它談 identifier、檔名、package 名稱，還有他說的 avoiding chatter。意思就是把名字縮到只剩必要資訊。\u003C\u002Fp>\u003Cp>你可能會想問，名字真的有那麼重要嗎？有，而且很煩。爛名字會拖慢 code review，讓 API 看起來像亂碼，還會把本來 5 分鐘能懂的程式，拖成 30 分鐘的考古。對團隊來說，這就是隱形成本。\u003C\u002Fp>\u003Cblockquote>“There are only two hard things in Computer Science: cache invalidation and naming things.” — Phil Karlton\u003C\u002Fblockquote>\u003Cp>這句話老到不行，但還是很準。因為命名不是一次性的工作。每個人讀 code、改 code、寫文件，都會再付一次代價。名字取得爛，成本就一直滾。\u003C\u002Fp>\u003Cp>同一週還有一個很實際的 compiler 修正。Go 1.26 的 type checker，現在能更早抓到 incompl\u003Ca href=\"\u002Fnews\u002Fkubernetes-becoming-ais-control-plane-zh\">ete\u003C\u002Fa> type 被拿去做需要完整定義的事情。這種錯誤以前可能會冒出很怪的訊息，現在會更接近真正原因。少走幾次彎路，對大型 codebase 很有差。\u003C\u002Fp>\u003Cul>\u003Cli>Alex Edwards 的文章涵蓋 identifier、檔名、package 名稱。\u003C\u002Fli>\u003Cli>他提的 avoiding chatter，很適合團隊 code style。\u003C\u002Fli>\u003Cli>Go 1.26 改善 incomplete type 的錯誤偵測。\u003C\u002Fli>\u003Cli>更好的錯誤訊息，能少掉很多 debug 時間。\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>工具鏈也在跟著變強\u003C\u002Fh2>\u003Cp>Go 的有趣之處，在於它不是只靠語言本身撐場。工具鏈和套件庫也一直往前走。像 \u003Ca href=\"https:\u002F\u002Fwww.jetbrains.com\u002Fgo\u002F\" target=\"_blank\" rel=\"noopener\">GoLand\u003C\u002Fa> 這次的 2026.1 版本，就加入 Go 1.26 的 guided syntax updates，還支援 git \u003Ca href=\"\u002Fnews\u002Fmicrosoft-agent-framework-mcp-tool-options-zh\">work\u003C\u002Fa>trees。對大 repo 團隊來說，worktree 比一直 stash 來得乾淨很多。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1775178767185-ystc.png\" alt=\"Go 1.26 讓 slice 更少上 heap\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>再看資料庫這邊，\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fjackc\u002Fpgx\" target=\"_blank\" rel=\"noopener\">pgx 5.9\u003C\u002Fa> 加了 SCRAM-SHA-256-PLUS、OAuth authentication、Postgres protocol 3.2，還有 tsvector 支援。這些更新很像是給 production 團隊的實用補丁，不是展示用功能。\u003C\u002Fp>\u003Cp>另一個很妙的是 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fncruces\u002Fgo-sqlite3\" target=\"_blank\" rel=\"noopener\">go-sqlite3 v0.33.0\u003C\u002Fa>。它從早期的 WebAssembly 路線，轉向用 wasm2go 把 SQLite 轉成 Go。這種做法很有工程味。你少了一些跨語言 runtime 的包袱，但底層實作方式也完全不同。\u003C\u002Fp>\u003Cp>如果你在做 TUI，\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Fbubbletea\" target=\"_blank\" rel=\"noopener\">Bubble Tea\u003C\u002Fa> 也有更新。\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Fbubbles\" target=\"_blank\" rel=\"noopener\">Bubbles 2.1\u003C\u002Fa> 加了自動調整大小的 textarea。\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Ffantasy\" target=\"_blank\" rel=\"noopener\">Fantasy v0.17.0\u003C\u002Fa> 則加入 Anthropic Computer Use support。Go 生態圈現在真的橫得很廣。\u003C\u002Fp>\u003Cul>\u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.jetbrains.com\u002Fgo\u002Fwhatsnew\u002F\" target=\"_blank\" rel=\"noopener\">GoLand 2026.1\u003C\u002Fa> 支援 Go 1.26 與 git worktrees。\u003C\u002Fli>\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fjackc\u002Fpgx\" target=\"_blank\" rel=\"noopener\">pgx 5.9\u003C\u002Fa> 加入 SCRAM-SHA-256-PLUS、OAuth、protocol 3.2。\u003C\u002Fli>\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fncruces\u002Fgo-sqlite3\" target=\"_blank\" rel=\"noopener\">go-sqlite3 v0.33.0\u003C\u002Fa> 改用 wasm2go。\u003C\u002Fli>\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Fbubbles\" target=\"_blank\" rel=\"noopener\">Bubbles 2.1\u003C\u002Fa> 加入自動調整 textarea。\u003C\u002Fli>\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Ffantasy\" target=\"_blank\" rel=\"noopener\">Fantasy v0.17.0\u003C\u002Fa> 支援 Anthropic Computer Use。\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>這些更新對 production Go 代表什麼\u003C\u002Fh2>\u003Cp>我覺得這週最值得看的，不是單一功能，而是整體方向。Go 一直在把「少做無謂工作」這件事做得更細。編譯器更會省 allocation，type checker 更早報錯，\u003Ca href=\"\u002Fnews\u002Fnvidia-forum-su7-cuda-lattice-engine-zh\">ID\u003C\u002Fa>E 也更懂新語法。這些都很務實。\u003C\u002Fp>\u003Cp>如果你是跑 production 的團隊，這類改善通常比新語法更有感。因為你每天面對的是成本、延遲、錯誤率，不是 demo。少一點 heap allocation，就可能少一點 GC 抖動。少一個難懂的錯誤，就可能少一小時排查。\u003C\u002Fp>\u003Cp>競品面也可以順手比一下。Rust 很強，但學習成本高。Java 的 GC 工具很成熟，但 runtime 複雜度也高。Go 的路線一直很明確，就是讓編譯器和標準工具替你省事。這次的 stack allocation 改進，就是這條路線的延伸。\u003C\u002Fp>\u003Cp>如果用數字來看，差異通常會出現在 allocation 次數、GC CPU、以及 p95 \u002F p99 latency。很多團隊在升版前後做 benchmark，常常會看到 allocation 減少 10% 到 30%。實際數字還是要看程式本身，但這已經夠讓人想升了。\u003C\u002Fp>\u003Cul>\u003Cli>Go 走的是低心智負擔路線。\u003C\u002Fli>\u003Cli>Rust 偏向嚴格控制與高學習成本。\u003C\u002Fli>\u003Cli>Java 偏向成熟 runtime 與複雜 GC 調校。\u003C\u002Fli>\u003Cli>Go 這次的收益，多半會出現在 allocation 和 tail latency。\u003C\u002Fli>\u003Cli>升版前後跑 benchmark，才知道有沒有吃到紅利。\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>Go 為什麼一直在修這些細節\u003C\u002Fh2>\u003Cp>Go 不是那種常常丟大招的語言。它比較像一直在磨刀。這次的 slice stack allocation、type checker 修正、IDE 支援，都是同一種思路。把日常開發裡最常卡住的地方，一點一點磨平。\u003C\u002Fp>\u003Cp>這也很符合 Go 的使用場景。很多團隊用它做 API server、worker、資料處理管線、CLI 工具。這些東西不需要花俏。它們需要的是穩、快、好維護。編譯器和工具鏈只要能少出一點怪事，團隊就能少花很多時間救火。\u003C\u002Fp>\u003Cp>另外，Go 社群現在也很成熟。像 \u003Ca href=\"https:\u002F\u002Fgolangweekly.com\u002Flatest\" target=\"_blank\" rel=\"noopener\">Golang Weekly\u003C\u002Fa> 這種整理，會把語言、工具、套件、文章一起串起來。對開發者來說，這比只看 release note 更接地氣。你可以直接看到哪些更新真的會碰到工作流。\u003C\u002Fp>\u003Ch2>我會怎麼看這波更新\u003C\u002Fh2>\u003Cp>如果你有在維護 Go 服務，我會建議你盡快測 Go 1.26。先看 allocation benchmark，再看 p95、p99 latency。不要只看平均值，平均值很會騙人。真正影響使用者的，常常是尾端那幾筆。\u003C\u002Fp>\u003Cp>如果你的程式有很多短命 slice、JSON 轉換、字串切片、或 request-level 的資料整理，這次很可能有收穫。反過來說，如果你的瓶頸在 I\u002FO、SQL、外部 API，這次改善可能沒那麼明顯。但至少你會得到更好的錯誤訊息和更順的工具鏈。\u003C\u002Fp>\u003Cp>我的預測很直接。接下來幾個 Go release，還會繼續往 allocation、診斷、工具整合這三個方向磨。你現在該做的，不是等別人告訴你有沒有差，而是自己先跑一輪 benchmark。真的有差，才知道這波更新值不值得你排進升版時程。\u003C\u002Fp>","Go 1.25、1.26 讓更多 slice 留在 stack，減少 GC 工作量。這週還有 GoLand 2026.1、pgx 5.9、go-sqlite3 更新，對 production Go 很實用。","golangweekly.com","https:\u002F\u002Fgolangweekly.com\u002Flatest",null,"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1775178768272-g7oq.png","industry","zh","ab00df84-e1af-4d27-bd3b-75bba399fbe3",[17,18,19,20,21,22,23,24],"Go 1.26","stack allocation","GC","slice","GoLand","pgx","go-sqlite3","compiler optimization",3,"2026-04-03T01:12:28.60517+00:00","2026-04-03T01:12:28.447+00:00",{"tags":29,"relatedLang":43,"relatedPosts":47},[30,32,34,35,37,39,40,41],{"name":21,"slug":31},"goland",{"name":18,"slug":33},"stack-allocation",{"name":22,"slug":22},{"name":24,"slug":36},"compiler-optimization",{"name":19,"slug":38},"gc",{"name":23,"slug":23},{"name":20,"slug":20},{"name":17,"slug":42},"go-126",{"id":15,"slug":44,"title":45,"language":46},"go-126-stack-allocation-gc-overhead-en","Go 1.26 trims GC overhead with stack slices","en",[48,54,60,66,72,78],{"id":49,"slug":50,"title":51,"cover_image":52,"image_url":52,"created_at":53,"category":13},"9a0692ba-a9c5-42eb-823d-8a0e6e6ae3fc","openai-ipo-filing-turns-hype-into-scrutiny-zh","OpenAI IPO 讓神話變審核","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781042614962-bj12.png","2026-06-09T22:03:04.524304+00:00",{"id":55,"slug":56,"title":57,"cover_image":58,"image_url":58,"created_at":59,"category":13},"40d4f012-36b6-4b8f-b470-30242a0b8483","skatteetaten-public-sector-ai-should-be-judged-by-outcomes-zh","Skatteetaten 證明公部門 AI 應該看成果，不是看噱頭","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781038986405-p8cf.png","2026-06-09T21:02:32.1198+00:00",{"id":61,"slug":62,"title":63,"cover_image":64,"image_url":64,"created_at":65,"category":13},"f937e16b-7b3c-4ec8-b9f6-2b6031c6892c","openai-ipo-filing-wall-street-test-zh","OpenAI IPO 登場，華爾街先看這 5 件事","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781032675072-oq1m.png","2026-06-09T19:17:23.187013+00:00",{"id":67,"slug":68,"title":69,"cover_image":70,"image_url":70,"created_at":71,"category":13},"8258e540-397f-4566-8ae5-37582f3e3418","openai-latest-moves-pricing-safety-scale-zh","OpenAI 4 個最新動向：定價、安全、規模都在變","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781031777355-odh9.png","2026-06-09T19:02:26.913687+00:00",{"id":73,"slug":74,"title":75,"cover_image":76,"image_url":76,"created_at":77,"category":13},"5a3f8c97-afa9-43cd-a5f7-64a1fcfd99d2","risc-v-mini-pcs-worth-buying-now-future-bet-zh","RISC-V 迷你電腦現在值得買，但只適合押注未來","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781026383355-9003.png","2026-06-09T17:32:31.318476+00:00",{"id":79,"slug":80,"title":81,"cover_image":82,"image_url":82,"created_at":83,"category":13},"651bdda4-2566-4185-a33d-254862d4290d","fedora-44-risc-v-widens-linux-board-support-zh","Fedora 44 RISC-V 把支援面擴到 17 板","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781025476806-1woq.png","2026-06-09T17:17:24.257564+00:00",[85,90,95,100,105,110,115,120,125,130],{"id":86,"slug":87,"title":88,"created_at":89},"ee073da7-28b3-4752-a319-5a501459fb87","ai-in-2026-what-actually-matters-now-zh","2026 AI 真正重要的事","2026-03-26T07:09:12.008134+00:00",{"id":91,"slug":92,"title":93,"created_at":94},"83bd1795-8548-44c9-9a7e-de50a0923f71","trump-ai-framework-power-speech-state-preemption-zh","川普 AI 框架瞄準電力、言論與州權","2026-03-26T07:12:18.695466+00:00",{"id":96,"slug":97,"title":98,"created_at":99},"ea6be18b-c903-4e54-97b7-5f7447a612e0","nvidia-gtc-2026-big-ai-announcements-zh","NVIDIA GTC 2026 重點拆解","2026-03-26T07:14:26.62638+00:00",{"id":101,"slug":102,"title":103,"created_at":104},"4bcec76f-4c36-4daa-909f-54cd702f7c93","claude-users-spreading-out-and-getting-better-zh","Claude 用戶更分散，也更會用","2026-03-26T07:22:52.325888+00:00",{"id":106,"slug":107,"title":108,"created_at":109},"bd903b15-2473-4178-9789-b7557816e535","openclaw-raises-hard-question-for-ai-models-zh","OpenClaw 逼問 AI 模型價值","2026-03-26T07:24:54.707486+00:00",{"id":111,"slug":112,"title":113,"created_at":114},"eeac6b9e-ad9d-4831-8eec-8bba3f9bca6a","gap-google-gemini-checkout-fashion-search-zh","Gap 把結帳搬進 Gemini","2026-03-26T07:28:23.937768+00:00",{"id":116,"slug":117,"title":118,"created_at":119},"0740e53f-605d-4d57-8601-c10beb126f3c","google-pushes-gemini-transition-to-march-2026-zh","Google 把 Gemini 轉換延到 2026 年 3…","2026-03-26T07:30:12.825269+00:00",{"id":121,"slug":122,"title":123,"created_at":124},"e660d801-2421-4529-8fa9-86b82b066990","metas-llama-4-benchmark-scandal-gets-worse-zh","Meta Llama 4 分數風波又擴大","2026-03-26T07:34:21.156421+00:00",{"id":126,"slug":127,"title":128,"created_at":129},"183f9e7c-e143-40bb-a6d5-67ba84a3a8bc","accenture-mistral-ai-sovereign-enterprise-deal-zh","Accenture 攜手 Mistral AI 賣主權 AI","2026-03-26T07:38:14.818906+00:00",{"id":131,"slug":132,"title":133,"created_at":134},"191d9b1b-768a-478c-978c-dd7431a38149","mistral-ai-faces-its-hardest-year-yet-zh","Mistral AI 迎來最硬的一年","2026-03-26T07:40:23.716374+00:00"]