除了基本的整型、浮点型、布尔型、字符串外,还有数组、切片、结构体、函数、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)) } // 经过类型转换计划字符串的中文字数