Go基本數據類型

基本數據類型

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

整型

整型分爲無符號和有符號兩個大類:函數

  • 有符號oop

    按長度分爲:int八、int1六、int3二、int64ui

  • 無符號編碼

    uint八、uint1六、uint3二、uint64spa

其中,uint8就是咱們熟知的byte型,int16對應C語言中的short型,int64對應C語言中的long型。code

類型 描述
uint8 無符號 8位整型 (0 到 255)
uint16 無符號 16位整型 (0 到 65535)
uint32 無符號 32位整型 (0 到 4294967295)
uint64 無符號 64位整型 (0 到 18446744073709551615)
int8 有符號 8位整型 (-128 到 127)
int16 有符號 16位整型 (-32768 到 32767)
int32 有符號 32位整型 (-2147483648 到 2147483647)
int64 有符號 64位整型 (-9223372036854775808 到 9223372036854775807)

經過不一樣制式表示整型:blog

func fmtNum() {
    // 十進制
    var a int = 10
    fmt.Printf("%b \n", a)  // 1010

    // 八進制
    fmt.Printf("%o \n", a)  // 12

    //十六進制
    fmt.Printf("%x \n", a)  // a
    fmt.Printf("%X \n", a)  // A
}

 

浮點數

Go語言支持兩種浮點型數:float32float64。這兩種浮點型數據格式遵循IEEE 754標準: float32 的浮點數的最大範圍約爲 3.4e38,可使用常量定義:math.MaxFloat32float64 的浮點數的最大範圍約爲 1.8e308,可使用一個常量定義:math.MaxFloat64字符串

func fmtFloat() {
    var b float32 = 3.1415

    fmt.Printf("%f \n", b)  // 3.141500 
    fmt.Printf("%.3f \n", b)  // 3.141
}

 

布爾

Go語言中以bool類型進行聲明布爾型數據,布爾型數據只有truefalse兩個值。string

注意:

  • 布爾類型變量的默認值爲false
  • Go 語言中不容許將整型強制轉換爲布爾型.
  • 布爾型沒法參與數值運算,也沒法與其餘類型進行轉換。

字符串

  • 多行字符串

    str := `第一行
    第二行
    第三行
    `

     

  • 字符串操做

    方法 介紹
    len(str) 求長度
    +或fmt.Sprintf 拼接字符串
    strings.Split(str, sep) 分割
    strings.contains(str, substr) 判斷是否包含
    strings.HasPrefix(str, prefix),strings.HasSuffix(str, suffix) 前綴/後綴判斷
    strings.Index(str, substr),strings.LastIndex(str, substr) 子串出現的位置
    strings.Join(a[]string, sep string) join操做

    e.g

    func strOperator() {
        str := "goingtu"
        fmt.Println(len(str))  // 7
        fmt.Println(strings.Split(str, "g"))  // [ oin tu]
        fmt.Println(strings.Contains(str, "tu"))  // true
        fmt.Println(strings.HasPrefix(str, "go"))  // true
        fmt.Println(strings.HasSuffix(str, "tu"))  // true
        fmt.Println(strings.Index(str, "g"))  // 0
        fmt.Println(strings.LastIndex(str, "g"))  // 4
    
        b := []string{"1", "2", "3"}
        fmt.Println(strings.Join(b, ","))  // "1,2,3"
    }

     

     

byte和rune類型

組成每一個字符串的元素叫作「字符」,能夠經過遍歷或者單個獲取字符串元素得到字符。

Go 語言的字符有如下兩種:

  1. uint8類型,或者叫 byte 型,表明了ASCII碼的一個字符。
  2. rune類型,表明一個 UTF-8字符

當須要處理中文、日文或者其餘複合字符時,則須要用到rune類型。rune類型實際是一個int32

func loopStr()  {
    a := "hello 你們好!"
    for i := 0; i < len(a); i ++ { // byte
        fmt.Printf("%c", a[i])
    }
    fmt.Println()
    for _, j := range a{  // rune
        fmt.Printf("%c", j)
    }
}

// hello 大家好ï¼
// hello 你們好!

 

由於UTF8編碼下一個中文漢字由3~4個字節組成,因此咱們不能簡單的按照字節去遍歷一個包含中文的字符串,不然就會出現上面輸出中第一行的結果。

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

類型轉換

func countZh() {
    a := "hello 你們好 !"
    b := []rune(a)
    fmt.Println(len(b))
}
// 經過類型轉換計劃字符串的中文字數
相關文章
相關標籤/搜索