Like Share Discussion Bookmark Smile

J.J. Huang   2025-01-15   Getting Started Golang 01.基本型別   瀏覽次數:次   DMCA.com Protection Status

Go | 命名規則與初始化規則

💬 簡介

在 Go 語言中,命名規則與變數初始化規則是我們編寫程式時需要遵循的重要原則。好的命名不僅能提高程式碼的可讀性,也有助於維護與協作。而初始化規則則是 Go 語言內建的一個特性,系統會自動為未初始化的變數賦予預設值,這樣的設計有助於避免錯誤並簡化開發流程。

本篇文章將深入探討 Go 語言中的命名規則與變數初始化規則,並展示如何運用這些原則來寫出更乾淨且具可讀性的程式碼。

圖片來源:Gophers(地鼠造型的原創者為 Renee French)


🏷️ 命名規則

在 Go 語言中,命名規則非常簡單,遵循的基本原則是簡潔與一致。以下是 Go 語言命名規則的幾個要點:

1️⃣ 變數命名

  • 駝峰式命名(Camel Case)
    Go 語言並不強制使用其他命名規範(如大駝峰式 UpperCamelCase 或底線 snake_case),但開發者可以根據需求選擇適合的命名風格,前提是保持一致性。
    1
    2
    var userName string
    var totalAmount float64

    要注意首字母與可見性 在 Go 中,首字母的大小寫決定變數或函式的可見性

    • 首字母大寫:可導出(Exported)
      如果變數或函式的名稱首字母大寫,則表示該變數或函式是可以被包外部訪問的,即可導出。
    • 首字母小寫:不可導出(Unexported)
      如果變數或函式的名稱首字母小寫,則該變數或函式只能在包內部使用,無法被外部訪問。
      1
      2
      3
      4
      5
      6
      // Go 語言中:首字母大小寫決定可見性

      var TotalAmount float64 // 公有,可導出
      var totalAmount float64 // 私有,不可導出

      // C++ 或 Java 中:使用 public/private 關鍵字決定

2️⃣ 常量命名

  • 常量的命名通常會使用大寫字母並且以下劃線分隔每個單字。
    1
    2
    const MAX_VALUE = 100
    const PI = 3.14159

3️⃣ 避免使用不必要的縮寫

  • 清晰勝於簡短
    變數名稱應簡潔清楚,避免過多使用難以理解的縮寫。例如:
    1
    2
    3
    4
    // 不推薦
    var amt float64 // 無法直觀理解 amt 的用途
    // 推薦
    var amount float64 // 清楚地表達此變數用於存放金額

4️⃣ 關鍵字與內建型別

  • 變數名稱不能與關鍵字或內建型別重名
    Go 有一些保留的關鍵字(如 if, for, func)和內建型別(如 int, bool),不能用來命名變數,否則會導致編譯錯誤。例如:
    1
    2
    3
    4
    5
    6
    7
    // 錯誤
    var int = 10
    var func = "test"

    // 正確
    var number int
    var functionName string

5️⃣ 錯誤命名

  • 錯誤型別變數慣用 err
    Go 社群習慣使用 err 表示錯誤型別變數名稱:
    1
    2
    3
    4
    var err error  
    if err != nil {
    fmt.Println("An error occurred:", err)
    }

🔑 變數初始化規則

Go 語言有一個獨特的特性,就是當一個變數被宣告後,會自動為它賦予一個對應型別的零值。這一點與許多其他程式語言不同,無需手動初始化變數,這樣的設計有助於避免某些常見錯誤並提高開發效率。

1️⃣ 零值概念

Go 語言的零值是指變數在未被顯式初始化時,系統會為其賦予的預設值。不同型別有不同的零值,以下是一些常見型別的零值:

  • 布林值: false
  • 數值型別(int、float): 00.0
  • 字串: ""(空字串)
  • 指標: nil
  • 切片、映射、通道: nil
  • 結構體: 所有欄位的零值

2️⃣ 零值範例

當在 Go 中宣告一個變數但不初始化它時,該變數會自動賦予零值。以下是一些範例:

1
2
3
4
5
6
var a int                                  // 零值為 0
var b string // 零值為 ""
var c bool // 零值為 false
var ptr *int // 零值為 nil,表示未指向任何有效記憶體地址
var arr [3]int // 零值為 [0, 0, 0]
var person struct { Name string; Age int } // 零值為 {Name: "", Age: 0}

3️⃣ 零值與初始化

在 Go 語言中,變數可以在宣告時選擇初始化。如果不進行初始化,則變數會自動擁有對應型別的零值。如果需要給變數賦予具體的值,則需要在宣告時進行初始化:

1
2
var x int = 10              // 初始化為 10
var y string = "Hello, Go!" // 初始化為 "Hello, Go!"

4️⃣ 使用短變數宣告

Go 也支持使用短變數宣告方式來初始化變數,這樣可以在宣告的同時賦予初始值:

1
2
x := 42      // 使用短變數宣告,初始化為 42
name := "Go" // 使用短變數宣告,初始化為 "Go"

5️⃣ 指定型別的零值

有時候可能會希望變數的型別雖然是某個型別,但也能夠得到型別的零值。這種情況下,即使沒有顯式初始化,Go 也會為變數指定該型別的零值。

1
2
var x int     // 變數 x 的零值為 0
var y float64 // 變數 y 的零值為 0.0

🛠️ 常見問題與解決方法

  • 問題:如何檢查變數是否正確初始化?
    解決方法:

    1
    fmt.Printf("Variable value: %v, Type: %T\n", variableName, variableName)
  • 問題:可導出與不可導出的命名規則混淆?
    解決方法:記住,首字母大寫的變數、函式和型別是可導出的,首字母小寫則是包內私有的。


🎯總結

這篇文章介紹了 Go 語言中的命名規則與變數初始化規則。良好的命名習慣能夠提高程式碼的可讀性和可維護性,而變數的初始化規則則使 Go 語言的開發更加便捷。無論是手動初始化還是依賴零值,Go 都能夠有效地支持開發者快速編寫程式。

學習這些基本規則有助於更有效地寫出高質量的程式碼,並避免在開發過程中產生意外錯誤。

最後建議回顧一下 Go | 菜鳥教學 目錄,了解其章節內容。


註:以上參考了
Go
Effective Go
A Tour of Go - Zero values