土拨鼠-->基本数据类型
基本数据类型:
Go语言中有丰富的数据类型,基本数据类型大体分为三类:数字类型、布尔类型、字符串类型、特殊类型;高级数据类型有:数组、切片、map、结构体、函数、接口、通道等;本文只介绍基本数据类型,高级的数据类型往后章节分别介绍。
数字类型:
数字类型主要分为有符号数和无符号数,有符号数可以用来表示负数,除此之外它们还有位数的区别,不同的位数代表它们实际存储占用空间,以及取值的范围;uint8、int8、uint16、int16、uint32、int32、uint64、in64、float32、float64、complex64、complex128、uint(32 or 64 bits)、int(32 or 64 bits)、uintptr;uint8就是我们熟知的byte型,int16对应C语言中的short型,int64对应C语言中的long型。
(1)uint和int的长度由操作系统的位数决定,在 32 位系统里面,它们的长度为 32 bit, 64 位系统,长度为 64 bit;
(2)uintptr无符号整型,用于存放一个指针;
注意:
a) 每种数字类型都有取值范围,超过了取值范围,出现 overflows
的错误;
b) 涉及到二进制传输、读写文件的结构描述时,为了保持文件的结构不会受到不同编译目标平台字节长度的影响,不要使用uint和int;
1 package main 2 3 import ( 4 "fmt" 5 "math" 6 ) 7 8 func main() { 9 // 十进制 10 var a int = 10 11 fmt.Printf("%d \n", a) // 10 12 fmt.Printf("%b \n", a) // 1010 占位符%b表示二进制 13 14 // 八进制 以0开头 15 var b int = 077 16 fmt.Printf("%o \n", b) // 77 17 18 // 十六进制 以0x开头 19 var c int = 0xff 20 fmt.Printf("%x \n", c) // ff 21 fmt.Printf("%X \n", c) // FF 22 23 //float 24 fmt.Printf("%f\n", math.Pi) 25 fmt.Printf("%.2f\n", math.Pi) 26 //复数 27 var c1 complex64 28 c1 = 1 + 2i 29 var c2 complex128 30 c2 = 2 + 3i 31 fmt.Println(c1) 32 fmt.Println(c2) 33 }
布尔类型:
布尔型数据只有true和false两个值。
注意:
a) 布尔类型变量的默认值为false;
b) Go 语言中不允许将整型强制转换为布尔型;
c) 布尔型无法参与数值运算,也无法与其他类型进行转换。
字符串类型:
(1)Go 语言里的字符串的内部实现使用UTF-8
编码。 字符串的值为双引号("xxx")中的内容,可以在Go语言的源码中直接添加非ASCII码字符,例如:
s1 := "hello" s2 := "你好"
(2)Go 语言的字符串常见转义符包含回车、换行、单双引号、制表符等,如下表所示
转义符 | 说明 |
\r | 回车符(返回行首) |
\n | 换行符(直接跳到下一行的同列位置) |
\t | 制表符 |
\' | 单引号 |
\" | 双引号 |
\\ | 反斜杠 |
(3)Go语言中要定义一个多行字符串时,就必须使用反引号字符:
s1 := `第一行
第二行
第三行
`
fmt.Println(s1)
注意:
反引号间换行将被作为字符串中的换行,但是所有的转义字符均无效,文本将会原样输出。
(4)字符串常见操作:
方法 | 介绍 |
len(str) | 求长度 |
strings.Split | 分割 |
+或fmt.Sprintf | 拼接字符串 |
strings.contains | 判断是否包含 |
strings.HasPrefix,strings.HasSuffix | 前缀/后缀判断 |
strings.Index(),strings.LastIndex() | 字串出现的位置 |
strings.Join(a[]string, sep string) | join操作 |
var str = "hello, 失身男孩" b := str[0] //b is a uint8 type, like byte fmt.Println(b) // fmt.Println(string(b)) // 强转 fmt.Println(len(str)) // 查看字符串有多少个字节 fmt.Println(len([]rune(str))) // 查看有多少个字符
特殊类型:
(1)byte,或者叫uint8 ,用于表示二进制数据的 bytes,代表了ASCII码的一个字符;
(2)rune,实际是int32 , 用于表示一个符号,代表一个UTF-8字符;
注意:
当需要处理中文、日文或者其他复合字符时,则需要用到rune类型;
Go 使用了特殊的 rune 类型来处理 Unicode,让基于 Unicode 的文本处理更为方便,也可以使用 byte 型进行默认字符串处理,性能和扩展性都有照顾。
// 遍历字符串 func forStr() { 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() }