先分流:你要拿它幹什麼
學 Go 的第一週,配 GOPATH、選編輯器、裝工具鏈往往比學語法更磨人。按需求分流(競品格局為 2026-10-24 競研核實):
| 你要做的事 | 順手的選擇 | 為什麼 |
|---|---|---|
| 「這行語法對不對」的三十秒問題 | 官方 go.dev/play 或任何線上 playground | 單檔案貼程式碼點 Run,零心智負擔 |
| 跑教材例子(猜數字、讀輸入的迴圈) | 帶互動主控台的線上執行器(如本站 Go 線上編譯器) | 例子裡 fmt.Scan 要讀鍵盤,多數 playground 沒有互動輸入跑不通 |
| 多檔案小程式、實驗工程結構 | 支援多檔案工作區的線上執行器 | 一個 main 拆多個原始檔,配合檔案樹整體執行 |
| 寫進倉庫的正式專案 | 本機工具鏈(go build / go vet / IDE) | 工程品要完整的編譯期診斷,瀏覽器解譯器給不了 |
前三行是本文的範圍:瀏覽器裡的 Go 線上執行,怎麼用才順手。
線上跑 Go 的三種姿勢
以本站 Go 線上編譯器 為例(WASM 解譯執行,程式碼不上傳):
單檔案速跑:貼程式碼點執行,標準庫開箱即用——fmt、strings、strconv、sort、time、encoding/json、errors 直接 import。fmt.Println("hello") 到 channelselect 的例子都能跑。死循環不用怕,一鍵停止立即回到可執行狀態。
多檔案工作區:同一個 main 包拆成多個原始檔,檔案樹裡增刪檔案、上傳本機檔案或匯入整個 ZIP,整體執行。適合驗證「這樣拆包結構對不對」——把教學專案拖進來跑一遍,比看目錄截圖直觀得多。
互動式主控台:這是選線上執行器時最值得檢查的能力——bufio.Scanner(os.Stdin)、fmt.Scan 這類標準輸入寫法直接可用,逐行輸入、程式逐行讀。Go 教材前幾章的例子大量依賴鍵盤輸入(猜數字遊戲、循環讀入直到 EOF),沒有互動輸入的 playground 只能把例子改寫成寫死資料,學習體驗打折。
語法試驗的高頻場景
並發原語體驗:goroutine、channel、select 都能在瀏覽器裡直接跑——教科書上「生產者消費者」的十行例子,改個 buffer 大小、換個 select 分支立刻看到行為差異。並發是 Go 的核心賣點,動手改參數比讀三遍文件有效。
標準庫行為驗證:「time.After 在 select 裡的行為」「strconv.Quote 到底轉義什麼」「sort.Slice 是不是穩定排序」——這類「文件讀了兩遍還是不確定」的問題,十行程式碼線上驗證是最快的閉環。
預載第三方套件:uuid、yaml.v3、errgroup、decimal 這類小而高頻的庫 import 即用,不用裝。寫真實專案前的「這個庫的 API 順不順手」,可以先在瀏覽器裡試十分鐘。
執行歷史:試驗品多了以後,本機儲存的執行歷史可以隨時恢復、重跑、對比——「剛才那個版本的行為」不用靠記憶。
真話:解譯器不是工具鏈
瀏覽器方案跑的是 WASM 解譯器(本站用 yaegi),不是完整的 Go 工具鏈。差距要講清楚:
- 編譯期診斷弱:
go build、go vet在編譯階段抓住的型別錯誤、未使用匯入、可疑寫法,解譯器要執行到那一步才暴露,錯誤形態也不同。片段試驗無所謂,工程程式碼不能靠它把關; - 編輯器是輕量的:線上編輯器提供高亮與基本編輯,不是 gopls 驅動的 IDE——沒有跳轉定義、沒有即時診斷面板。這是「片段試驗場」的定位使然,不是缺陷,但要知道;
- 依賴生態有限:標準庫加預載套件覆蓋教學與片段場景,任意公網套件(go get)在瀏覽器裡做不到。
判斷標準一句話:程式碼是試驗品就線上跑,是工程品就上本機。中間態(幾十行、要進倉庫前先驗證一下)兩邊都行——線上驗證行為,本機過編譯。
常見問題
Go 線上執行和本機裝 Go 差距有多大?
瀏覽器方案跑的是 WASM 解譯器(如 yaegi),不是完整工具鏈:適合語法試驗、教學例子、標準庫行為驗證;差距在編譯期診斷——go build、go vet 能在編譯階段抓住的型別與匯入問題,解譯器要執行到那一步才暴露,錯誤訊息的形態也不同。判斷標準:程式碼是「試驗品」用線上,是要進倉庫的「工程品」用本機工具鏈。
瀏覽器裡能讀鍵盤輸入嗎?
看工具:多數線上 playground 沒有互動式輸入,程式裡的 Scan/Scanner 讀不到東西,例子只能寫死資料。帶互動主控台的線上執行器支援逐行輸入——bufio.Scanner(os.Stdin)、fmt.Scan 這類標準寫法直接可用,教材裡依賴輸入的例子原樣跑通,不用改程式碼。
線上環境能 import 哪些套件?
標準庫通常可用(fmt、strings、strconv、sort、time、encoding/json、errors 這些高頻庫開箱即用);第三方套件取決於工具是否預載——常見的是 uuid、yaml.v3、errgroup、decimal 這類小而高頻的庫。任意公網套件(go get)在瀏覽器環境裡做不到:WASM 沒有模組代理與網路檔案系統。需要大生態依賴的時候,就是切本機工具鏈的訊號。
和官方 go.dev/play 相比怎麼選?
官方 playground 的定位是單檔案速驗:貼一段程式碼點 Run,適合「這行語法對不對」的三十秒問題。它的邊界同樣明確——沒有互動式輸入、單檔案為主、程式碼要提交到伺服器執行。帶互動主控台、多檔案工作區、本機執行的線上執行器適合更重的場景:教材例子的輸入依賴、多檔案小程式、不想把程式碼發出去的內部片段。兩個不是二選一,是按片段重量分層用。