\ 當我開始學習 Go 時,我首先想到的問題之一是:
"我該如何實際組織我的程式碼?"
在像 C 這樣的語言中,通常會將所有內容放入單個檔案中,或者可能分開標頭和實現檔案。但在 Go 中,專案結構非常重要:它影響著你擴展、測試和共享程式碼的難易程度。在本文中,我將介紹為什麼結構很重要,如何從不同檔案訪問函數,以及我在前進過程中學到的最佳實踐。
Go 程式可以完全存在於單個檔案中:
package main import "fmt" func main() { fmt.Println("2 + 2 =", 2+2) }
這對於"hello world"或快速實驗來說很好。
但一旦你添加更多功能(減法、乘法、除法...),檔案就會變得混亂且難以擴展。
這就是 Go 的套件和資料夾發揮作用的地方。
在 Go 中,每個檔案都屬於一個套件。
按照慣例:
以下是我如何拆分計算器專案:
calculator/ │ ├── main.go └── calculator/ └── operations.go
\
package calculator func Add(a, b int) int { return a + b } func Subtract(a, b int) int { return a - b } func Multiply(a, b int) int { return a * b } func Divide(a, b int) (int, error) { if b == 0 { return 0, fmt.Errorf("cannot divide by zero") } return a / b, nil }
package main import ( "fmt" "GoLang-progress/calculator" ) func main() { fmt.Println("2 + 3 =", calculator.Add(2, 3)) fmt.Println("10 - 4 =", calculator.Subtract(10, 4)) fmt.Println("6 * 7 =", calculator.Multiply(6, 7)) result, err := calculator.Divide(8, 0) if err != nil { fmt.Println("Error:", err) } else { fmt.Println("8 / 0 =", result) } }
注意main.go 現在多麼乾淨:它不用擔心數學本身,只關注如何使用它。
一個常見的初學者問題:
"我如何從另一個檔案或資料夾調用函數?"
在我的儲存庫中,我這樣組織結構:
calculator/ │ ├── main.go └── internal/ └── calc/ └── operations.go
這裡,數學函數位於 internal/calc 下。
\
package calc import "fmt" func Add(a, b int) int { return a + b } func Divide(a, b int) (int, error) { if b == 0 { return 0, fmt.Errorf("cannot divide by zero") } return a / b, nil }
\
package main import ( "fmt" "github.com/turman17/GoLang-progress/calculator/internal/calc" ) func main() { fmt.Println("2 + 3 =", calc.Add(2, 3)) result, err := calc.Divide(10, 0) if err != nil { fmt.Println("Error:", err) } else { fmt.Println("10 / 2 =", result) } }
你的導入必須匹配 go.mod 中的模組路徑加上資料夾路徑。
在你的儲存庫中,go.mod 包含:
module github.com/turman17/GoLang-progress
你想使用的計算器程式碼位於資料夾:
calculator/internal/calc
所以完整的導入路徑是:
github.com/turman17/GoLang-progress/calculator/internal/calc
常見錯誤和修復
❌ import "GoLang-progress/calculator/internal/calc"
→ 缺少 GitHub 組織/用戶名。必須使用完整路徑。
❌ import "github.com/turman17/GoLang-progress/internal/calc"
→ 路徑中缺少 calculator 目錄。
❌ go: module not found errors
→ 確保 go.mod 有 module github.com/turman17/GoLang-progress 並運行 go mod tidy。
\
go run ./calculator
或
go build ./calculator
隨著專案增長,你通常會看到這種模式:
project-name/ │ ├── cmd/ → 可執行檔案(主入口點) ├── internal/ → 私有程式碼(不供外部使用) ├── pkg/ → 可重用套件 ├── api/ → API 定義(gRPC、OpenAPI 等) └── go.mod
對於初學者來說,這可能有點過頭。但當你進入網頁應用、服務或 MLOps 工具時,這種佈局變得至關重要。
我將繼續分享我在探索 Go 用於MLOps 和後端開發時學到的內容。接下來:Go 中的錯誤處理和測試。
\ 👉 在這裡查看我的儲存庫:https://github.com/turman17/GoLang-progress
敬請期待下一篇文章!


