9

Golang学习笔记--slice使用总结

 3 years ago
source link: https://blog.csdn.net/keenw/article/details/113032711
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

切片对数组进行包装,为数据序列提供了更通用、更强大和更方便的接口。Go中的大多数数组编程都是用切片而不是简单的数组来完成的
slice(切片)代表变长的序列,序列中每个元素都有相同的类型。一个slice类型一般写作[]T,其中T代表slice中元素的类型。

1.slice创建

  • 直接通过初始化参数创建
  • 使用内置函数make创建。使用默认值进行初始化
  • 从指定下标创建。没指定的将使用默认值进行初始化,比如int类型是0值,string类型是空串。

2.slice的操作

  • 下标索引操作
  • for循环操作
  • 切片操作。跟python里面切片一样
  • 两个slice不能直接使用 == 进行比较。slice唯一合法的比较操作是和nil比较
  • 内置函数的len和cap函数分别返回slice的长度和容量
  • 内置函数append进行添加操作
  • 内置函数copy进行拷贝操作

3.slice的使用注意点

  • 切片保存对底层数组的引用,如果将一个切片分配给另一个切片,则两个切片都引用同一个数组。 修改切片的值,会同时影响到源切片的数据
  • 如果函数接受slice参数,则调用者可以看到它对slice元素所做的更改,类似于传递指向底层数组的指针。
  • slice没有提供直接删除的切片某个元素的内置函数,可以自己组合切片来实现
  • 在边界处拷贝 Slices 和 Maps(uber_go_guide)

        接收 Slices的时候注意拷贝。当 map 或 slice 作为函数参数传入时,如果您存储了对它们的引用,则用户可以对其进行修改。

        返回 slices的时候注意拷贝。同样,请注意用户对暴露内部状态的 map 或 slice 的修改。

4.slice的runtime的部分实现


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK