携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第10天,点击查看活动详情
处于性能考虑的实用代码
我们将把数组和切片做一个对比,在对比中学习。
数组和切片
区别
- 1、数组是值类型,而GO语言是属于强类型,也就是说即使[2]int和[10]int代表的也是不同的类型,而切片属于引用类型,变量存放的是一个内存地址值,这个地址值指向的空间存的才是最终的值。
- 2、数组的大小是固定的,切片大小是变化的。所以切片可以理解为动态数组。
创建
/*数组 arr为数组名*/
//方法一
arr :=new([len] type)
//方法二
var name [size] type
/*切片*/
//方法一
slice1 := make([]type, len)
//方法二方法二是利用已经存在的切片或者数组进行截取
a1:=[5]int{1,2,3,4,5}
s1:=a1[2,5] //2表示从原来的数组的第一个元素开始,end表示最后一个,省略则表示截取到原数组末尾。遵循前闭后开原则
初始化
//数组
arr := [num]type{i1, i2, i3, i4, i5}
//给下标赋值
arrKeyValue := [len]type{i1: val1, i2: val2}
//截取数组的切片
var slice1 []type = arr1[start:end]
在一个二维数组或者切片 arr2Dim 中查找一个指定值 V :
我们需要使用到for循环嵌套,是二维数组遍历。
//声明切片二维int类型
arr2Dim:=make([][]int,10,10)
//声明切片
arrD:=make([]int,10,10)
//初始化切片
arrD=append(arrD,2,3,4,5)
//声明切片
arra:=make([]int,10,10)
//初始化切片
arra=append(arra,7,8,9,0)
//初始化切片
arr2Dim=append(arr2Dim,arrD,arra)
//声明并赋值int类型
V:=9
//声明bool类型
found := false
//使用for循环
Found: for row := range arr2Dim {
for column := range arr2Dim[row] {
//判断
if arr2Dim[row][column] == V{
found = true
break Found
}
}
}
fmt.Println(found) //返回ture
自定义数据类型用法
数组和切片不仅仅只是能存放GO语言中原生的数据类型,还可以自定义类型,一般自定义结构体。
- 代码示例:
type Renter struct {
RenterAddr common.Address `json:renterAddr ` //租借者地址
Since int `json:since` //租借开始时间renter
Over int `json:over` //租借截止时间
}
//声明一个Renter类型的数组
var arrRenter []Renter
//这样我们就可以很方便的将这种类型的数据通过for遍历出来渲染到页面上了