1. 程式人生 > >go學習筆記-基礎型別

go學習筆記-基礎型別

基礎型別

布林值

布林值的型別為bool,值是true或false,預設為false。

//示例程式碼
var isActive bool  // 全域性變數宣告
var enabled, disabled = true, false  // 忽略型別的宣告
func testBool() {
    var available bool  // 一般宣告
    valid := false      // 簡短宣告
    available = true    // 賦值操作
}

數值型別

整數型別有無符號和帶符號兩種。Go同時支援int和uint,這兩種型別的長度相同,但具體長度取決於不同編譯器的實現。Go裡面也有直接定義好位數的型別:rune, int8, int16, int32, int64和byte, uint8, uint16, uint32, uint64。其中rune是int32的別稱,byte是uint8的別稱。

需要注意的一點是,這些型別的變數之間不允許互相賦值或操作,不然會在編譯時引起編譯器報錯。

var a int8 = 1

浮點數的型別有float32和float64兩種,預設是float64。

var b float32 = 4.67890

Go還支援複數。它的預設型別是complex128(64位實數+64位虛數)。如果需要小一些的,也有complex64(32位實數+32位虛數)。複數的形式為RE + IMi,其中RE是實數部分,IM是虛數部分,而最後的i是虛數單位。

var c complex64 = 5+5i

字串

字串是用一對雙引號("")或反引號(``)括起來定義,反引號括起的字串為Raw字串,它的型別是string。

//示例程式碼
var frenchHello string  // 宣告變數為字串的一般方法
var emptyString string = ""  // 聲明瞭一個字串變數,初始化為空字串
func testString() {
    a := "abc"
    b := `demo <>`
}

字串是不可變的,例如下面的程式碼編譯時會報錯:cannot assign to s[0]

var s string = "hello"
s[0] = 'c'

但如果真的想要修改怎麼辦呢?下面的程式碼可以實現:

s := "hello"
c := []byte(s)  // 將字串 s 轉換為 []byte 型別
c[0] = 'c'
s2 := string(c)  // 再轉換回 string 型別

可以使用+操作符來連線兩個字串:

s := "hello,"
m := " world"
a := s + m

錯誤型別

Go內建有一個error型別,專門用來處理錯誤資訊,Go的package裡面還專門有一個包errors來處理錯誤:

func testError() {
    err := errors.New("fatal error")
    fmt.Println(err)
}

零值

關於“零值”,所指並非是空值,而是一種“變數未填充前”的預設值,通常為0。 此處羅列 部分型別 的 “零值”

int     0
int8    0
int32   0
int64   0
uint    0x0
rune    0 //rune的實際型別是 int32
byte    0x0 // byte的實際型別是 uint8
float32 0 //長度為 4 byte
float64 0 //長度為 8 byte
bool    false
string  ""