golang中出于性能考虑的那些实用代码片段 | 数组切片篇

87 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 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遍历出来渲染到页面上了