切片初识
切片介绍
在初始定义数组时,我们并不知道需要多大的数组,因此我们就需要“动态数组”。在Go里面这种数据结构叫slice。 切片解决了数组长度不能扩展,以及基本类型数组传递时产生副本的问题。
在初始定义数组时,我们并不知道需要多大的数组,因此我们就需要“动态数组”。在Go里面这种数据结构叫slice。 切片解决了数组长度不能扩展,以及基本类型数组传递时产生副本的问题。
需要使用任意类型的关联,就需要用到集合,比如学号和名字。Go语言提供了映射关系容器是map,内部使用散列表(hash)实现。
大多数语言中映射关系容器使用两种算法:散列表和平衡树。
Go保留了指针,代表某个内存地址,默认值为nil,使用&取变量地址,通过*访问目标对象。
简单示例: 1
2
3
4
5v := "3"
ptr := &v
value := *ptr
fmt.Printf("指针地址为:%p\n", ptr) // 输出0x.....16进制数
fmt.Printf("指针地址内存储的值为:%s\n", value) // 输出3
数组是一段固定长度的连续内存区域。数组的长度定义后不可更改,长度使用 len() 获取。
1 | var arr1 [10]int //定义长度为10的整型数组,很少这样使用 |
Golang 中没有专门的字符类型,如果要存储单个字符(字母),一般使用 byte 来保存,且使用单引号包裹。
字符类型可以以d%打印为整型。 1
2
3
4
5
6
7
8
9var c1 byte = 'a'
var c2 byte = '0'
fmt.Println("c1=", c1) //输出 97
fmt.Println("c2=", c2) //输出48
fmt.Printf("c1=%c,c2=%c\n", c1, c2) //输出原值 a 0
//var c3 byte = '北'
//fmt.Printf("c3=%c", c3) //溢出错误
整数类型有无符号(如int)和带符号(如uint)两种,这两种类型的长度相同,但具体长度取决于不同编译器的实现。
int8、int16、int32和int64四种有符号整数类型,分别对应8、16、32、64bit大小的有符号整数,同样uint8、uint16、uint32和uint64对应四种无符号整数类型。
if
判断示例: 1
2
3//初始化与判断写在一起: if a := 10; a == 10
if i == '3' {
}
if
的特殊写法: 1
2if err := Connect(); err != nil { // 这里的 err!=nil 才是真正的if判断表达式
}