【转】 golang slice array

freebird92 · · 2370 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

1. array
  同一类型数据的集合
    var arr [n]type    //声明type类型一维数组
    var arr [m][n]type //声明type类型二维数组
    多维数组以此类推
    也可以用 := 声明
    arr := [n]type{元素1[,元素2, ...]} 其中n可以用 "..." 三个点表示,系统会根据元素个数来确定
  下标只能为 int 类型,而 php 还支持 string 类型的下标
  1.1 数组长度 len(arr)
    注:数组长度在定义后就不可变
  1.2 遍历:
    a
. 循环通过过数组下标访问 arr[0] ~ arr[(len(arr))]
    b. range arr, 有两个返回值 第一个为数组下标,第二个为元素的值,与php遍历数组相似

  1. for k, v := range array {  
  2.     fmt.Printf("arr[%d] = %d \t", k, v)  
  3. }  
  1. foreach ($arr as $k => $v) {  
  2.     printf("arr[%d] = %d \t", $k, $v);  
  3.     //echo '$arr[' . $k . "] = " . $v . "\t";  
  4. }  

  1.3 数组在赋值与传递参数时,都会产生一个数组副本,而不是使用它的指针

2. slice
  在定义 array 时,其长度是固定的,并且 array 是一个值类型
  而 slice 是一个可变的数组,但是一个引用类型
  2.1 产生slice的三种方式
    a
. 声明与 array 一样,不过不需要指定长度
    var slice1 []int
    slice2 := []int {元素1[, 元素2, ...]}
    b. 从数组(或者切片或者字符串)中获取 arr[i:j] i=数组的开始位置,j=结束位结果,j-i=切片的长度,i和j都可以省略,省略时 i=0, j=len(arr),i是从0开始,j是从1开始
      a b c d e f
    i 0 1 2 3 4 5
    j 1 2 3 4 5 6

  1. slice1 := arr[:]    //arr[0:6]/arr[0:]  
  2. slice2 := arr[1:1]  //[]  
  3. slice4 := arr3[1:3] //b c  
  4. slice5 := arr3[:5]  // = arr3[0:5]  

    c. make
    slice1 := make([]int, 5, 10)
    len(slice1) = 5, cap(slice1) = 10, 元素的初始值为0
  2.2 相关函数
    len
(slice): 返回 slice 的元素个数(长度)
    cap(slice): 返回 slice 的分配空间大小
    append(slice1, slice2...): 把 slice2 追加到 slice1 产生新的 slice, 若 slice2 是变量时,不能省略...,相当于 append(slice1, a[, b, ...])
    copy(目标slice, 源slice): 以最小的切片元素个数为准,将源 slice 复制到 目标 slice
  2.3 cap - len = 0 时,系统将动态分配新的数组空间,即切片会自动处理存储空间不足的问题
  2.4 遍历与 array 一样
  2.5 在传递参数时,传递的为指针


有疑问加站长微信联系(非本文作者)

本文来自:博客园

感谢作者:freebird92

查看原文:【转】 golang slice array

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2370 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传