- Published on
[Go 學習系列] 3. Golang 語法入門:變數、常數與型別
- Authors
- Name
- Vic Chen
為什麼要先理解語法基礎?
在上篇我們已經成功執行了第一個 Hello Go!
程式。
但要能寫出更完整的邏輯,我們得先了解 Go 的變數宣告與型別系統。
Go 是一個「強型別(Strongly Typed)」的語言,它強制你在編譯時期就確定變數的型別,
這讓程式更安全,也更容易維護。
變數宣告方式
Go 支援幾種不同的變數宣告方法。這裡我們逐一介紹。
var
宣告
1️⃣ 使用 最基本的變數宣告方式:
var name string = "Vic"
var age int = 30
你也可以同時宣告多個變數:
var a, b int = 1, 2
NOTE
var
關鍵字可搭配明確型別,也可讓編譯器自動推論(type inference):
var message = "Hello Go!" // Go 自動推論為 string
2️⃣ 短變數宣告(:=)
在函式內常用的寫法:
name := "Alice"
age := 25
這等價於 var name string = "Alice"
。
但要注意::=
不能用在函式外部(也就是不能在 package level 使用)。
下面是一個錯誤範例 👇:
package main
// ❌ Compile Error: non-declaration statement outside function
greeting := "Hi" // 短變數宣告只能用在函式內部
func main() {
println(greeting)
}
正確的寫法應該是使用 var
:
package main
var greeting = "Hi"
func main() {
println(greeting)
}
3️⃣ 多重賦值與忽略變數
Go 支援多重回傳與多重賦值:
x, y := 1, 2
x, y = y, x
也可以透過「空白識別字 _
」忽略不需要的回傳值:
result, _ := divide(10, 2) // 忽略第二個回傳值
常數(Constant)
使用 const
宣告固定不變的值:
const Pi = 3.14159
const Greeting = "Hello"
NOTE
常數一旦定義後無法修改,也不能透過運算式在執行時期決定。
iota
自動產生枚舉值
使用 Go 提供 iota
幫你產生連續數值(常用於列舉):
const (
Sunday = iota
Monday
Tuesday
Wednesday
)
輸出結果:
Sunday: 0
Monday: 1
Tuesday: 2
Wednesday: 3
基本資料型別
Go 的基本型別主要分為:
類別 | 型別名稱 | 範例 |
---|---|---|
整數 | int、int8、int16、int32、int64 | var n int = 10 |
浮點數 | float32、float64 | var f float64 = 3.14 |
布林 | bool | var active bool = true |
字串 | string | var s string = "Hello" |
字元 | rune(代表 Unicode) | var r rune = '字' |
位元 | byte(uint8 的別名) | var b byte = 'A' |
TIP
Go 的 string
是以 UTF-8 編碼 儲存的,中文和 emoji 都可以正確顯示。
rune vs byte 差異
ch := '好' // rune,實際型別是 int32
b := 'A' // byte,實際型別是 uint8
fmt.Printf("%c = %d\n", ch, ch)
fmt.Printf("%c = %d\n", b, b)
輸出:
好 = 22909
A = 65
Go 的命名與可見性規則
Go 的封裝機制很簡單:
大寫開頭的名稱 → 對外可見(public)
小寫開頭的名稱 → 僅在 package 內可見(private)
// 可被其他 package 引用
func PrintHello() { ... }
// 僅能在同一個 package 使用
func printInternal() { ... }
NOTE
Go 沒有像 Java 的 public
、private
關鍵字,
只靠「首字母大小寫」來決定可見性,簡單又直覺。
🧩 小練習:BMI 計算器
我們來做個簡單練習,綜合應用變數、常數與基本型別。
package main
import "fmt"
func main() {
const meterToCm = 100.0
var name string
var heightCm, weightKg float64
fmt.Print("輸入姓名: ")
fmt.Scanln(&name)
fmt.Print("輸入身高(cm): ")
fmt.Scanln(&heightCm)
fmt.Print("輸入體重(kg): ")
fmt.Scanln(&weightKg)
heightM := heightCm / meterToCm
bmi := weightKg / (heightM * heightM)
fmt.Printf("%s 的 BMI 為 %.2f\n", name, bmi)
}
執行結果範例:
輸入姓名: Vic
輸入身高(cm): 180
輸入體重(kg): 75
Vic 的 BMI 為 23.15
結語
這篇我們學會了:
- 如何宣告變數與常數
- 了解 Go 的強型別特性
- 基本資料型別與可見性規則
下一篇,我們將進一步探索 Go 的 控制流程與函數基礎,
讓你的 Go 程式可以開始「有邏輯地思考」!