• Go切片基础


     1 package main
     2 
     3 import "fmt"
     4 
     5 //切片(Slice)本身没有数据,是对底层Array的一个view
     6 //不使用指针就可以改数组内容
     7 //slice可以向后扩展,但是不可以向前扩展
     8 //s[i]不可以超越len(s),s[:]向后扩展不可以超越底层数组Cap(s)
     9 //添加元素时如果超越Cap,系统会重新分配更大的底层数组
    10 
    11 func updateSlice( s []int){  //s不加长度代表切片
    12     s[0] = 100
    13 }
    14 
    15 func main() {
    16     arr := [...]int{ 0, 1, 2, 3, 4, 5, 6, 7}
    17     fmt.Println("arr[2:6] = ", arr[2:6])  //[2 3 4 5]
    18     fmt.Println("arr[:6] = ", arr[:6])    //[0 1 2 3 4 5]
    19     s1 := arr[2:]
    20     fmt.Println("arr[2:] = ", s1)   //[2 3 4 5 6 7]
    21     s2 := arr[:]
    22     fmt.Println("arr[:] = ", s2)    //[0 1 2 3 4 5 6 7]
    23 
    24     //修改切边内容
    25     updateSlice(s1)
    26     fmt.Println(s1)             //[100 3 4 5 6 7]
    27     fmt.Println(arr)            //[0 1 100 3 4 5 6 7]
    28 
    29     updateSlice(s2)
    30     fmt.Println(s2)            //[100 1 100 3 4 5 6 7]
    31     fmt.Println(arr)           //[100 1 100 3 4 5 6 7]
    32 
    33     //再次切片
    34     s2 = s2[:5]
    35     fmt.Println(s2)         //[100 1 100 3 4]
    36     s2 = s2[2:]
    37     fmt.Println(s2)      //[100 3 4]
    38 
    39     //slice扩展
    40     arr[0], arr[2] = 0, 2  //把值改回去
    41     s1 = arr[2:6]
    42     s2 = s1[3:5]
    43     fmt.Println(s1)  //[2 3 4 5]
    44     fmt.Println(s2)  //[5 6]
    45     //6在s1中并没有,为什么可以取出来呢?
    46     //slice可以向后扩展,但是不可以向前扩展
    47     fmt.Printf("len(s1)=%d, cap(s1)=%d
    ", len(s1),cap(s1))  //4,6
    48     // fmt.Println( s1[3:7]) 出错
    49     //fmt.Println( s1[4]) 出错
    50     fmt.Printf("len(s2)=%d, cap(s2)=%d
    ", len(s2),cap(s2))    //2,3
    51 
    52     //向slice添加元素
    53     fmt.Println(arr)  //[0 1 2 3 4 5 6 7]
    54     s3 := append(s2, 10)
    55     s4 := append(s3, 11)
    56     s5 := append(s4, 12)
    57     fmt.Println(s2)   //[5 6]
    58     fmt.Println(s3)   //[5 6 10]
    59     fmt.Println(s4)   //[5 6 10 11]
    60     fmt.Println(s5)   //[5 6 10 11 12]
    61     fmt.Println(arr)  //[0 1 2 3 4 5 6 10]  把7改为了10
    62 }
  • 相关阅读:
    fio工具讲解
    flask迁移数据库报错
    base64编码
    OpenStack学习笔记,未完待续
    docker运行报错
    centos搭建SVN服务器并实现自动同步至web目录 (必定安装成功)
    centos/linux 源码安装mysql详细记录
    centos7.7安装php7.3的lnmp环境和composer详细步骤
    laravel-admin使用ueditor重命名图片名称问题
    nginx 图片防盗链 设置
  • 原文地址:https://www.cnblogs.com/yuxiaoba/p/9345714.html
走看看 - 开发者的网上家园