原文地址:https://learn-linux.readthedocs.io
歡迎關注我們的公衆號:小菜學編程 (coding-fan)
Go 內置了以下基本類型:
布爾
- bool
字符串
- string
整數
- int int8 int16 int32 int64
- uint uint8 uint16 uint32 uint64
字節
- byte , uint8 的別名
Unicode
- rune , int32 別名
浮點
- float32 float64
複數
- complex64 complex128
package main
import (
"fmt"
"math/cmplx"
)
var (
ToBe bool = false
MaxInt uint64 = 1 << 64 -1
z complex128 = cmplx.Sqrt(-5 +12i)
)
func main() {
fmt.Printf("Type: %T Value: %v\n", ToBe, ToBe)
fmt.Printf("Type: %T Value: %v\n", MaxInt, MaxInt)
fmt.Printf("Type: %T Value: %v\n", z, z)
}
例子展示了幾種不同類型變量的用法。 注意到,跟 import語句 一樣,變量申明可以批量寫到一個代碼塊裏。
一般來說,int 、 uint 以及 uintptr 類型在 32
位機器上是 32
位長; 在 64
位機器上則是 64
位長。 需要使用整數時, int
類型是首選, 除非你有特別的理由一定要用 定長 或者 無符號 類型。
零值
變量申明時沒有顯式賦初始值,則默認是“ 零 ”。
不同的類型有不同的“ 零 ”:
- 對於數值類型是
0
; - 對於布爾類型是
false
; - 對於字符串類型是
""
(空字符串);
package main
import "fmt"
func main() {
var i int
var f float64
var b bool
var s string
fmt.Printf("%v %v %v %q\n", i, f, b, s)
}
類型轉換
表達式 ( expression ) T(v)
將值 v
轉換成類型 T
, 這就是所謂的 類型轉換 ( type conversions )。
這是一些數值類型轉換:
var i int = 42
var f float64 = float64(i)
var u uint = uint(f)
或者簡寫成:
i := 42
f := float(i)
u := uint(f)
跟 C 語言有所不同, Go 在不同類型之間賦值,需要顯式類型轉換。 不信,將下面例子中 float64
和 unit
類型轉換移除,看看發生什麼?
package main
import (
"fmt"
"math"
)
func main() {
var x, y int = 3, 4
var f float64 = math.Sqrt(float64(x*x + y*y))
var z uint = uint(f)
fmt.Println(x, y, z)
}
類型推理
變量類型通過右邊的值推理而來。
如果申明右邊的值是有類型的,那麼新變量也是一樣的類型:
var i int
j := i // j is an int as well
如果右邊只是一個數值常量,沒有具體類型,那麼新變量可能是 int 、 float64 以及 complex128 三種類型中的一種,取決於常量的精度。
i := 42 // int
f := 3.142 // float64
g := 0.867 + 0.5i // complex128
接下來做個實驗吧! 改變例子中 v
的初始值,觀察它是如何影響變量類型的:
package main
import "fmt"
func main() {
v := 42 // change me!
fmt.Printf("v is of type %T\n", v)
}
下一步
訂閱更新,獲取更多學習資料,請關注我們的 微信公衆號 :