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