使用 Go (Golang)
概述
Go(常被稱為 Golang)是 Google 設計並開源的一種靜態強型別、編譯型程式語言。憑藉其簡潔的語法、極快的編譯速度、卓越的並發處理能力(藉由輕量級的 goroutine
及用於溝通的 channel
機制)以及高效的內建垃圾收集,Go 深受眾多開發者喜愛。Go 語言特別擅長建構高效能的網路服務、分散式系統、微服務與命令列工具,已成為現代雲原生與後端開發的主流選擇之一。
ServBay 對 Go 的支援
ServBay 是專為 macOS 打造的整合式本機 Web 開發環境,為 Go 開發者帶來無縫且強大的支援。有了 ServBay,您可以十分輕鬆地安裝、管理並切換多個 Go 版本,無需手動配置繁複的環境變數(如 GOROOT
, GOPATH
),大幅簡化 Go 開發環境的安裝與日常維護。
ServBay 內建了完整的 Go 工具鏈,並支援從過往到最新穩定版在內的多款 Go 版本,以滿足您不同專案的需求:
- Go 1.11
- Go 1.12
- Go 1.13
- Go 1.14
- Go 1.15
- Go 1.16
- Go 1.17
- Go 1.18
- Go 1.19
- Go 1.20
- Go 1.21
- Go 1.22
- Go 1.23
- Go 1.24(以及未來 ServBay 推出時可能支援的更新版本)
Go Modules 支援
ServBay 環境預設啟用並建議優先使用 Go Modules 進行依賴管理。這是 Go 官方自 1.11 版引進後推薦的標準依賴解決方案。在 ServBay 的終端環境中,您可直接使用 go mod
等相關指令(如 go mod init
, go get
, go mod tidy
)管理專案依賴,無須擔心傳統 $GOPATH
設定的問題。
前置條件
- 您已在 macOS 成功安裝並執行 ServBay。
- 具備 Go 程式基礎知識。
- 熟悉在終端機(Terminal)中進行基本指令操作。
安裝 Go
透過 ServBay 直覺易用的圖形介面 (GUI) 面板安裝 Go 開發環境非常簡單:
- 啟動 ServBay 應用程式。
- 於左側導覽列點擊
軟體包
。 - 在展開的軟體包清單中找到
Go
分類。 - 點擊
Go
將其展開,您將看到 ServBay 支援的各個 Go 版本。 - 選擇所需的 Go 版本(通常建議選擇最新的穩定版,如 Go 1.24),點擊其旁的
安裝
按鈕。 - ServBay 會自動下載並完成安裝作業,所需時間取決於網路狀況。
安裝完成後,該版本狀態會顯示為已安裝,並且您可以隨時安裝其他版本或於已安裝版本間自由切換。
使用 Go
成功安裝 Go 後,即可在系統終端直接使用 go
的全套指令工具。
驗證 Go 是否妥善安裝並檢查當前啟用的 Go 版本,可執行:
go version
終端將輸出類似下列訊息,顯示出現在透過 ServBay 管理的 Go 版本:
go version go1.24.1 darwin/arm64
建立並執行簡單的 Go Web 應用
以下將說明如何在 ServBay 下創建一個基本的 Go HTTP 伺服器範例,並進行編譯與執行。
建立專案目錄: 建議於 ServBay 預設網站根目錄
/Applications/ServBay/www
下建立新的 Go 專案目錄。這邊以go-servbay-demo
為例。bashcd /Applications/ServBay/www mkdir go-servbay-demo cd go-servbay-demo
1
2
3初始化 Go Modules: 在專案根目錄(
go-servbay-demo
)下,使用go mod init
初始化 Go Modules。模組路徑建議使用專案的唯一名稱,這裡以目錄名為例。bashgo mod init go-servbay-demo
1執行後,會在當前目錄下產生
go.mod
檔案,用於追蹤專案依賴。撰寫 Go 原始碼: 建立名為
main.go
的檔案,並貼上如下程式碼:gopackage main import ( "fmt" "log" "net/http" "os" ) func handler(w http.ResponseWriter, r *http.Request) { hostname, _ := os.Hostname() fmt.Fprintf(w, "Hello from Go on ServBay!\nHostname: %s\nPath: %s\n", hostname, r.URL.Path) } func main() { http.HandleFunc("/", handler) port := "8080" // 定義伺服器監聽的埠號 log.Printf("Go web server starting on port %s...", port) log.Printf("Access it at http://localhost:%s", port) // 啟動 HTTP 伺服器 err := http.ListenAndServe(":"+port, nil) if err != nil { log.Fatalf("Error starting server: %s\n", err) } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27此程式範例定義了一個簡單的 HTTP 伺服器,監聽本地 8080 埠號,所有請求都會回覆 "Hello from Go on ServBay!"、主機名稱與請求路徑。
執行 Go 應用: 請確認還在專案目錄(
/Applications/ServBay/www/go-servbay-demo
),然後使用go run
進行即時編譯與執行:bashgo run main.go
1若一切順利,終端將看到類似以下日誌,代表伺服器啟動成功:
2024/05/20 15:00:00 Go web server starting on port 8080... 2024/05/20 15:00:00 Access it at http://localhost:8080
1
2透過瀏覽器存取: 開啟您的瀏覽器並造訪
http://localhost:8080
,即可看到類似 "Hello from Go on ServBay! Hostname: your-mac-hostname Path: /" 的響應內容。
建議:透過 ServBay 網站配置反向代理
雖然可直接透過 localhost:8080
存取,但在本機開發時,建議使用更易於記憶的域名(如 go-app.servbay.demo
),同時藉由 ServBay 的 Web 伺服器(Caddy、Apache 或 Nginx)設定反向代理。如此可令 Go 應用更貼近真實生產環境,走標準 HTTP/HTTPS 埠存取,並便於使用 ServBay 的其他功能(如自動 HTTPS、與其他服務整合)。
- 於 ServBay 建立網站:
- 前往 ServBay GUI,進入
網站
區塊。 - 點擊
新增網站
。 - 域名: 輸入您的本機開發域名,如
go-app.servbay.demo
。 - 網站類型: 請選擇 反向代理。
- IP 位址: 輸入
127.0.0.1
。 - 埠號: 輸入
8080
。
- 前往 ServBay GUI,進入
儲存並重載設定: 於 ServBay GUI 儲存網站設定修改,並確保重啟或重新載入(如 Caddy 或 Nginx)以生效。
以域名存取: 現在您可在瀏覽器直接輸入
https://go-app.servbay.demo
,即可由 ServBay 的 Web 伺服器將請求轉發至您的 Go 應用。
管理 Go 版本
ServBay 讓 Go 版本的切換與管理變得前所未有的簡單。
- 切換版本: 到 ServBay GUI 的
軟體包
->Go
分頁,可以看到所有已安裝版本。進入側邊選單的設定
,可設置欲設為預設的 Go 版本。 - 驗證切換: 切換後重新開啟終端並執行
go version
,檢查輸出是否已符合剛設定的版本。
以 .servbay.config
管理專案級 Go 版本
除了全域切換外,ServBay 另提供專案級別的 Go 版本管理方式——只要在專案根目錄放置 .servbay.config
檔案。
運作原理:
當您用 ServBay 內建終端 cd
進入包含 .servbay.config
的資料夾,ServBay 會自動偵測並載入檔案設定(如 GO_VERSION
),臨時調整該終端會話的環境,讓 go
指令自動對應該專案指定的 Go 版本。
設定檔格式:
.servbay.config
是純文字檔,使用鍵值對格式,需指定 Go 版本時,只要加入一行 GO_VERSION
:
# .servbay.config 範例檔案
# 指定本專案使用 Go 1.22
GO_VERSION=1.22
# 亦可同時指定其他開發工具版本
# PHP_VERSION=8.3
# NODE_VERSION=20
# PYTHON_VERSION=3.11
# ... 其他可用設定 ...
# GOPROXY=https://goproxy.cn,direct
2
3
4
5
6
7
8
9
10
優勢:
- 自動版本切換: 不必反覆全域切換,進入專案目錄即可自動選用所需版本。
- 專案隔離: 確保每個專案都於合適、預期的 Go 環境下編譯執行,避免版本衝突。
- 團隊協作:
.servbay.config
推薦提交到版控(如 Git),讓團隊成員取得統一一致的 Go 環境基線。
應用情境:
假設您同時維護兩個專案:
project-a
需 Go 1.12project-b
採用最新版 Go 1.22
請於兩個專案的根目錄下建立各自的 .servbay.config
:
/Applications/ServBay/www/project-a/.servbay.config
:iniGO_VERSION=1.12
1/Applications/ServBay/www/project-b/.servbay.config
:iniGO_VERSION=1.22
1
當您在 ServBay 終端執行 cd /Applications/ServBay/www/project-a
並跑 go version
,將會看到 Go 1.12.x;若切至 cd /Applications/ServBay/www/project-b
則顯示 Go 1.22.x。
注意: .servbay.config
主要影響 ServBay 感知的「基礎」Go 版本。至於專案的外部依賴包管理,建議仍使用 Go Modules(go.mod
檔案)。
常見問題(FAQ)
Q: 在 ServBay 終端執行
go
指令卻顯示 "command not found"?A: 請先確認您的終端已正確注入 ServBay 的 PATH 環境變數。其次請檢查,您是否於 ServBay GUI 的
軟體包
->Go
條目中安裝好至少一個 Go 版本,並將其設為預設。Q: 如何於 ServBay 更新 Go 至最新版本?
A: 請定期查看 ServBay
軟體包
->Go
分頁。若有支援新版,會自動出現在列表中,點擊安裝即可。安裝完畢後,可於 GUI 切換為預設版本開始使用。Q: 使用 Go Modules 下載依賴時網路緩慢或遭阻斷?
A: Go Modules 預設透過
proxy.golang.org
下載依賴。中國大陸或部分網路受限地區可能遇阻。您可以設定GOPROXY
環境變數選擇適合的國內代理,如https://goproxy.cn
或https://goproxy.io
,並於 ServBay 全域設定,或在.servbay.config
檔案(如GOPROXY=https://goproxy.cn,direct
)設置。Q: 我的 Go Web 應用啟動時提示埠號已被佔用(address already in use)?
A: 此錯誤代表您程式碼設定的埠(如 8080)目前已有其他程序佔用。有兩大解法:第一,修正 Go 程式碼,更換為尚未被使用的埠號(例如 8081、9000);第二,找出並終止佔用該埠的程序。macOS 可用
lsof -i :<port_number>
(如lsof -i :8080
)查找 PID,然後用kill <PID>
停止該進程。Q:
.servbay.config
跟全域型 Go 版本切換有什麼差別?該怎麼選?A: 全域切換(在 ServBay GUI 設定)是改變整體系統預設 Go 版本;
.servbay.config
則提供專案級「臨時」覆蓋,只影響當前終端進入的專案。建議善用.servbay.config
做特定專案版本控管——如此可確保多專案環境隔離、結果可重現。全域切換則適用於您經常需用到的 Go 版本做為預設。
小結
ServBay 為 macOS 下 Go (Golang) 工程師打造了出色、高效率且貼合需求的本機開發環境。善用直覺的圖形介面,您能輕鬆安裝、管理多組 Go 版本,也能透過 .servbay.config
進行專案級版本控管。搭配 Go Modules 依賴管理,以及 ServBay 內建 Web 伺服器實現反向代理與應用部署,讓您能快速建置、執行與測試 Go 應用。ServBay 大幅降低了環境維護與配置負擔,助您專注於 Go 程式設計與創新發展。