5.1 變數與型別資訊
變數
宣告變數時,可使用關鍵字 var
,並使用 =
運算子來賦值。
範例:
var x int
var y int = 100
沒有設定初始值的變數,都會有一個預設值。對 int
型別而言,這個預設值是 0,故此範例的 x 初始值為 0。
一次宣告多個變數:
var x, y, z int
Short declaration syntax
另一種更簡潔的語法是用 :=
運算子來一次完成兩件事:宣告變數且賦值,而且不用寫 var
。此寫法稱為 short declaration syntax。
範例:
sum := 100 // sum 是一個整數。
str := "hello" // str 是一個字串。
x, y, z := true, sum, str // 一次宣告且設定多個變數。
使用 short declaration syntax 時,:=
的左側如果有多個變數,只要其中一個變數是新的(未曾宣告過的)即合法,否則編譯器會報錯。
x := 10
y := 20
x, y := 1, 2 // 編譯錯誤! 因為 x 和 y 都已經宣告過。必須改用 `=` 才合法。
x, y, z := 1, 2, 3 // OK! 因為 z 是新宣告的變數。
型別轉換
Go 是靜態型別語言,編譯器會自動推測型別,也會判斷型別是否相容。指派變數值的時候,若來源型別和目的型別不相容,便需要手動轉型,否則編譯器會報錯。
範例:
var num int = 100
num = int64(50) // 編譯錯誤。
num = 3.1416 // 編譯錯誤。
num = int(3.1416) // OK! num 的數值為 3。
更多語法和範例,建議參考官方文件:Conversions。
取得型別資訊
這裡示範三種方法來取得變數的型別資訊:
- 使用 fmt.Printf 的 %T 旗號。
- 使用 reflect 套件。
- 使用 type assertion。
使用 fmt.Printf 的 %T 旗號
var count int = 42
fmt.Printf("variable count=%v is of type %T \n", count, count)
使用 reflect 套件
使用 reflect.TypeOf()
方法:
fmt.Printf("%v", reflect.TypeOf(10)) // int
fmt.Printf("%v", reflect.TypeOf("Go")) // string
使用 type assertion
var x interface{} = 7
switch x.(type) {
case int:
fmt.Println("int")
}
參閱 A Tour of Go: Type assertions
先這樣,也許有空時會再更新。 我的其他站點:
Last modified: 2024-10-15