Go语言

发布时间 2024-01-03 20:14:53作者: 机器智能小白凡

存储结构:

  1、切片

    切片是Go中重要的数据类型,每个切片对象内部都维护着:数组指针(切片的地址)、切片长度、切片容量三个数据

    

      

 

长度是目前存储的数量,容量是最大存储数量

    在向切片中追加的数据个数大于容量时,内部会自动扩容且每次扩容都当前容量的两倍(当容量超过1024时每次扩容则只增加当前容量的1/4容量),注意扩容之后地址会改变

       

        

    

      var users = make([]int,2,5) //三个参数,第一个是切片的数据类型,第二个是初始化长度(刚开始存储的默认几个数据),第三个是容量(推荐)
           v3 := append(users,99) //指向的地址是一样的,但len不同,所以修改V3第一个数据users也会变
    往一个切片里面添加一个数据

        

切片的常见操作:

  长度和容量:

    len(v1)\cap(v1)

  索引:

    根据长度确定索引,根据索引获取值并且可以修改值

    

············

     切片:切片得到的切片的内部数据地址是一致的

    v2 := v1[1:3]

   追加:append

   

      

   删除:

  //切片取前几位的时候地址是相同的

  //但是后面赋值相当于给后面的覆盖掉了,所以v1也变了,但删除一位之后相当于最后会有重复的值

       

    插入:

  

      

    但是这种插入效率低下,所以插入操作尽可能不要用切片,用链表或者循环

  变量赋值:

这种地址是不同的

  整型、布尔类型、浮点型、字符串:

    赋值也是重新开辟内存存储数据

   数组:也是重新开辟内存,修改一者另一者不变

    

  切片虽然地址不同,但是他内部存储的指针依然指向的是同一块地址,但是如果扩容的话就会重新开辟区域了

     

    

 所以,目前学到的数据类型中,只有切片在修改内部元素时,会造成所有的赋值变量同时修改(不扩容的情况下)

 切片和数组的区别:

  切片修改数据时会导致所有赋值变量同时修改,且切片会自动扩容,数组在声明的时候容量定死了