go 数组,切片和map

go 语言入门学习

go 数组

定义:
数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,
这种类型可以是任意的原始类型例如整形、字符串或者自定义类型。
数组元素可以通过索引(位置)来读取(或者修改)。

如何声明:
name:变量名  size:数组的长度 type: 元素类型
var name [size] tpye

数组的使用:
func main() {
   var n [10]int /* n 是一个长度为 10 的数组 */
   var i,j int

   /* 为数组 n 初始化元素 */         
   for i = 0; i < 10; i++ {
      n[i] = i + 100 /* 设置元素为 i + 100 */
   }

   /* 输出每个数组元素的值 */
   for j = 0; j < 10; j++ {
      fmt.Printf("Element[%d] = %d\n", j, n[j] )
   }
}

切片

定义:
数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,
功能强悍的内置类型Slices切片,与数组相比切片的长度是不固定的,
可以追加元素,在追加时可能使切片的容量增大。
切片中有两个概念:一是len长度,二是cap容量,
长度是指已经被赋过值的最大下标+1,可通过内置函数len()获得。
容量是指切片目前可容纳的最多元素个数,可通过内置函数cap()获得。
切片是引用类型,因此在当传递切片时将引用同一指针,修改值将会影响其他的对象。

如何声明:
通过内置函数make 创建slice
var slice []type =  make([]type ,len) // len指定切片长度

var slice []type = make([]type, len, cap)  // cap 指定容量

切片截取:
slice[0,1,2,3,4]
slice[1:3] =[1, 2] // 截取下标1到2的数据
slice[:2] = [0, 1] // 截取默认下限(0)到下标2的数据
slice[2:] = [2, 3, 4] // 截取下标2到默认上限的数据

常用内置函数 len(),cap(),append(),copy()

slice := make([]int, 2, 4)
// 切片是可索引的,并且可以由 len() 方法获取长度。
len(slice) = 2

// 切片提供了计算容量的方法 cap() 可以测量切片最长可以达到多少。
cap(slice) = 4

// 向切片中添加一个或者多个元素,
append(slice, 1, 2, 3) 
printSlice(slice)  // len=5 cap=8 slice=[0 0 1 2 3]
    
sliceCopy := make([]int, 5, 16)
sliceCopy = copy(slice)
printSlice(slice)  // len=5 cap=16 slice=[0 0 1 2 3]

总结

1.在追加元素时如果容量cap不足时将按len的2倍扩容

Life is more than the present.