Types
Numbers
int/uint
類型 | 位元 | 值的範圍 |
---|---|---|
int8 | 1 | -128~127 |
uint8 | 1 | 0~255 |
int16 | 2 | -32768~32767 |
uint16 | 2 | 0~65535 |
int32 | 4 | -2147483648~2147483647 |
uint32 | 4 | 0~4294967295 |
int64 | 8 | -9223372036854775808~9223372036854775807 |
uint64 | 8 | 0~18446744073709551615 |
int | 看平台 | |
uint | 看平台 | |
uintptr | 同指標 | 4 or 8 |
float
float32、float64。
x := 1 //int
x := 1.0 //float 64
var x float64 = 1.0 //float64
var x float32 = 1.0 //float32
var x = 1.0 //float64
var x = 1 //int
var x float = 1.0 //wrong!!!
定義時沒有加小數點會被推斷為整數,而沒有指定型態的話,會被自動推斷為 float64。 float64 在 Go 語言相當於 C 語言的 Double,且 float32 與 float64 是無法一起計算的,需要強制轉型。
complex
complex64、complex128。 一個完整的複數需要包涵實數、虛數。 定義時讓 Go 自動判斷型態的型態會是 complex128,而不會是 complex64。
var complexValue complex64
complexValue = 1.2 + 12i
complexValue2 := 1.2 + 12i //complex128
complexValue3 := complex(3.2, 12) //complex128
String
字串型態無法在定義後被修改。
fmt.Println("1" + "1") //11
fmt.Println(len("Hello World"))//11
fmt.Println("Hello World"[1]) //101 "e"的 Ascii 十進制代碼
fmt.Println("Hello" + "World")//HelloWorld
fmt.Println("一二三"[8])//一個中文字有3byte 所以一個字會有3個Ascii 十進制代碼
slice1 := []string{"\u4e00\u4e8c\u4e09","一二三"}
fmt.Println(slice1[0][8])//Unicode一二三結果會同上
a := "Hello World"
fmt.Printf("%c",a[1])//e
Boolean
與其他語言一樣,值為 true 和 false。
var a bool
a = true
fmt.Println("a =", a)
b := false
fmt.Println("b =", b)
fmt.Println(true && true) //ture
fmt.Println(true && false) //false
fmt.Println(true || true) //ture
fmt.Println(true || false) //ture
fmt.Println(!true) //false