資料型別
1.分類
Go語言內建以下這些基礎型別:
型別 | 名稱 | 長度 | 零值 | 說明 |
---|---|---|---|---|
bool | 布林型別 | 1 | false | 其值不為真即為家,不可以用數字代表true或false |
byte | 位元組型 | 1 | 0 | uint8別名 |
rune | 字元型別 | 4 | 0 | 專用於儲存unicode編碼,等價於uint32 |
int, uint | 整型 | 4或8 | 0 | 32位或64位 |
int8, uint8 | 整型 | 1 | 0 | -128 ~ 127, 0 ~ 255 |
int16, uint16 | 整型 | 2 | 0 | -32768 ~ 32767, 0 ~ 65535 |
int32, uint32 | 整型 | 4 | 0 | -21億~ 21億, 0 ~ 42億 |
int64, uint64 | 整型 | 8 | 0 | |
float32 | 浮點型 | 4 | 0.0 | 小數位精確到7位 |
float64 | 浮點型 | 8 | 0.0 | 小數位精確到15位 |
complex64 | 複數型別 | 8 | ||
complex128 | 複數型別 | 16 | ||
uintptr | 整型 | 4或8 | ⾜以儲存指標的uint32或uint64整數 | |
string | 字串 | "" | utf-8字串 |
2.布林型別
var v1 bool
v1 = true
v2 := (1 == 2) // v2也會被推導為bool型別
//布林型別不能接受其他型別的賦值,不支援自動或強制的型別轉換
var b bool
b = 1 // err, 編譯錯誤
b = bool(1) // err, 編譯錯誤
3.整型
varv1int32
v1=123
v2:=64//v1將會被自動推導為int型別
4.浮點型
var f1 float32
f1 = 12
f2 := 12.0 // 如果不加小數點, fvalue2會被推導為整型而不是浮點型,float64
5.字元型別
在Go語言中支援兩個字元型別,一個是byte(實際上是uint8的別名),代表utf-8字串的單個位元組的值;另一個是rune,代表單個unicode字元。
package main
import (
"fmt"
)
func main() {
var ch1, ch2, ch3 byte
ch1 = 'a' //字元賦值
ch2 = 97 //字元的ascii碼賦值
ch3 = '\n' //轉義字元
fmt.Printf("ch1 = %c, ch2 = %c, %c", ch1, ch2, ch3)
}
6.字串
在Go語言中,字串也是一種基本型別:
var str string // 宣告一個字串變數
str = "abc" // 字串賦值
ch := str[0] // 取字串的第一個字元
fmt.Printf("str = %s, len = %d\n", str, len(str)) //內建的函式len()來取字串的長度
fmt.Printf("str[0] = %c, ch = %c\n", str[0], ch)
//`(反引號)括起的字串為Raw字串,即字串在程式碼中的形式就是列印時的形式,它沒有字元轉義,換行也將原樣輸出。
str2 := `hello
mike \n \r測試
`
fmt.Println("str2 = ", str2)
/*
str2 = hello
mike \n \r測試
*/
7.複數型別
複數實際上由兩個實數(在計算機中用浮點數表示)構成,一個表示實部(real),一個表示虛部(imag)。
var v1 complex64 // 由2個float32構成的複數型別
v1 = 3.2 + 12i
v2 := 3.2 + 12i // v2是complex128型別
v3 := complex(3.2, 12) // v3結果同v2
fmt.Println(v1, v2, v3)
//內建函式real(v1)獲得該複數的實部
//通過imag(v1)獲得該複數的虛部
fmt.Println(real(v1), imag(v1))