go--基本數據類型

整形

整型分爲如下兩個大類: 按長度分爲:int八、int1六、int3二、int64 對應的無符號整型:uint八、uint1六、uint3二、uint64數組

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

八進制和十六進組織

func main(){
    // 十進制
    var a int = 10
    fmt.Printf("%d \n", a)  // 10
    fmt.Printf("%b \n", a)  // 1010  佔位符%b表示二進制
 
    // 八進制  以0開頭
    var b int = 077
    fmt.Printf("%o \n", b)  // 77
 
    // 十六進制  以0x開頭
    var c int = 0xff
    fmt.Printf("%x \n", c)  // ff
    fmt.Printf("%X \n", c)  // FF
 
    // 變量的內存地址
    fmt.Printf("%p \n", &a)  // 0xc00004c080  佔位符%p表示十六進制的內存地址

浮點型

Go語言支持兩種浮點型數:float32float64性能

func main() {
        fmt.Printf("%f\n", math.Pi)
        fmt.Printf("%.2f\n", math.Pi)
}

布爾型

Go語言中以bool類型進行聲明布爾型數據,布爾型數據只有true(真)和false(假)兩個值。ui

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

字符串

Go 語言裏的字符串的內部實現使用UTF-8編碼。 字符串的值爲雙引號(")中的內容。
注意:在go中,''單引號中存放的是單個的字符,而不是字符串。code

字符串經常使用函數

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

byte和rune類型

組成每一個字符串的元素叫作「字符」,能夠經過遍歷或者單個獲取字符串元素得到字符。 字符用單引號(’)包裹起來。內存

Go 語言的字符有如下兩種: 1. uint8類型,或者叫 byte 型,表明了ASCII碼的一個字符。 2. rune類型,表明一個 UTF-8字符字符串

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

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

// 遍歷字符串
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(河)

修改字符串

要修改字符串,須要先將其轉換成[]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表示要轉換的類型。表達式包括變量、複雜算子和函數返回值等. 好比計算直角三角形的斜邊長。

func sqrtDemo() {
    var a, b = 3, 4
    var c int
    // math.Sqrt()接收的參數是float64類型,須要強制轉換
    c = int(math.Sqrt(float64(a*a + b*b)))
    fmt.Println(c)
}
相關文章
相關標籤/搜索