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