除了基本的整型、浮點型、布爾型、字符串外,還有數組、切片、結構體、函數、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語言支持兩種浮點型數:float32
和float64
。這兩種浮點型數據格式遵循IEEE 754
標準: float32
的浮點數的最大範圍約爲 3.4e38
,可使用常量定義:math.MaxFloat32
。 float64
的浮點數的最大範圍約爲 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
類型進行聲明布爾型數據,布爾型數據只有true
和false
兩個值。string
注意:
false
。多行字符串
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" }
組成每一個字符串的元素叫作「字符」,能夠經過遍歷或者單個獲取字符串元素得到字符。
Go 語言的字符有如下兩種:
uint8
類型,或者叫 byte 型,表明了ASCII碼
的一個字符。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)) } // 經過類型轉換計劃字符串的中文字數