數據類型

在Go中除了有最基礎的整型、浮點型、布爾型、字符串以外,還擁有數組、切片、結構體、函數、map、通道(channel)等。其中基本類型和別的語言都是大同小異的

 

整型:

  整型主要分成了兩大類:按長度分爲了:int8、int6、int32、int64對應的就是無符號整型:uint8、uint16、uint32、uint64

  其中uint8就是我們熟悉的bytes類型,int16對應了C語言中的short類型,int64對應了C語言中的long類型

 

 

 特殊整型:

  

 

 

   ps:在使用int和uint的時候,不能假定它是32或者64位的整型,而是考慮int和uint可能在不同的平臺上面的使用的差異

    獲取對象的長度用內建函數len()  函數返回的長度可以根據不同平臺的字節長度進行變化。在實際的使用中切片或者map的元素數量等都可以用int來表示。在涉及到二進制傳輸、讀寫文件的結果描述的時候,爲了保持文件的結構不會受到不同編譯目標平臺字節長度的影響,不要使用int和uint。

 

字符串:

  Go語言中的字符串以原生數據類型出現,使用字符串就像是使用其它原生數據一樣,Go語言裏的字符串的內部實現使用utf8編碼。字符串的值爲雙引號中的內容,可以在Go語言的源碼中直接添加非ascii碼的字符

  

  字符串轉義符:

    \n:換行符(直接跳到下一行的同列位置)

    \r:回車符(返回首行)

    \t:製表符

    \':單引號

    \":雙引號

    \\:反斜槓

  多行字符串:

    Go語言中要定義一個多行字符串時,就必須使用反引號字符`內容`

  字符串中常見的操作

 

 

 

 

byte和rune類型

  組成每個字符串的元素叫做字符,可以通過遍歷或者單個獲取字符串元素獲得字符。字符用單引號包裹起來

  Go的字符有以下兩種:

    1、uint8類型,或者叫byte類型,代表了ascii碼的一個字符

    2、rune類型,代表一個utf-8字符

  當你需要處理中文、日文或者其它的複合字符的時候,就會需要用到rune類型。rune類型實際上就是一個int32。

  Go使用了特殊的rune類型來處理unicode,讓基於unicode的文本處理更爲方便,也可以使用byte類型進行默認字符串處理,性能和擴展性都有照顧

func traversalString() {
    s := "hello沙河"
    for i := 0; i < len(s); i++ { //byte
        fmt.Printf("%v(%c) ", s[i], s[i])
    }
    fmt.Println()
    for _, r := range s { //rune
        fmt.Printf("%v(%c) ", r, r)
    }
    fmt.Println()
}

  輸出:

104(h) 101(e) 108(l) 108(l) 111(o) 230(æ) 178(²) 153() 230(æ) 178(²) 179(³) 
104(h) 101(e) 108(l) 108(l) 111(o) 27801(沙) 27827(河) 

 

  因爲utf8編碼下一個中問漢字是由3-4個字節組成的,所以我們不能簡單的按照字節去遍歷一個包含中文的字符串,否則就會出現上面輸出第一行中的結果

  字符串底層是一個byte數組,所以可以和[]byte類型互相轉換。字符串是不能修改的 字符串是由byte字節組成,所以字符串的長度是byte字節的長度。rune類型用來表示utf8字符,一個rune字符由一個或者多個byte組成。

 

修改字符串:

  要是想修改字符串,首先需要將其轉換成[]rune或者[]byte,完成後再轉換爲string。無論轉換成哪種,都會重新分配內存,並複製字節數組。

func changeString() {
    s1 := "big"
    // 強制類型轉換
    byteS1 := []byte(s1)
    byteS1[0] = 'p'
    fmt.Println(string(byteS1))

    s2 := "白蘿蔔"
    runeS2 := []rune(s2)
    runeS2[0] = ''
    fmt.Println(string(runeS2))
}

 

 

類型轉換:

  Go語言中只有強制類型轉換,沒有隱式類型轉換。該語法只能在兩個類型之間支持相互轉換的時候使用。

  T(表達式)

  其中T表示要轉換的類型,表達式包括變量、複雜算子、函數返回值等等

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章