go语言切片slice使用细节和注意事项整理

go语言中切片slice的使用是最为频繁的,效率也是最高的, 今天就给大家说说我们在使用过程中会忽略的一些细节。

先普及一下slice的核心基础知识 , go语言中的切片是引用类型, 其底层数据的存储实际上是存储在一个数组上(这个和他的数据类型 引用 是相关的 他底层就是引用的数组), 而数组的大小一旦定义其大小就是不可改变的,

使用建议 :建议大家在使用切片的时候,如果是知道大小 ,那就在make的时候指定大小,然后通过下标来使用 , 如果不知道大小 ,希望通过append来动态扩容,那在定义的时候就不要使用make来初始化

使用之前先初始化和分配内存空间

Go 复制代码
slice := make([]string, 2) //定义cap容量为2的字符串切片

slice[0] = "hello"

slice[1] = "golang"

用append函数将slice当做动态数组使用

Go 复制代码
var x []interface{} // 定义个空接口切片,注意切片如果定义后如果是使用append函数动态增加元素,则不需要使用make初始化分配空间,因为append函数帮我们做了这个事情。
// 如果是定义后想直接通过下标访问切片,则必须使用make初始化后才能使用下标访问!!

//动态增加元素, append会自动帮我们初始化和分配内存空间
x = append(x, "Hello golang")

定义切片的3种方式:

  1. 从已有的数组中使用中括号[]和指定截取索引的位置来截取切片;

  2. 使用 var 定义切片,然后使用append函数动态扩容;

  3. 直接使用make构建和初始化切片,然后通过下标使用 注意不能越界!!

切片使用细节注意事项

1. 如果切片是从已有的数组截取来的, 在切片里面改变数据或者原来数组值改变的时候, 原来的数组或者截取后的切片的值也会相应的改变,因为切片是引用的数组

  1. 切片使用len获取数据条数, 使用cap获取容量

3 切片的拷贝 注意事项

切片使用copy 内置函数完成拷贝:func copy(dst , src []++Type++ ) int

dst 要拷贝到的目标切片, src 拷贝数据的来源切片

var s4 = []int{7, 8, 9}

var ss4 = make([]int, 2) // 注意这里的创建的切片长度 , 需要大于等于要拷贝的src的长度 否则就只能拷贝这里的长度个元素

copy(ss4, s4)

fmt.Printf("ss2=%v\n", ss4) // ss2=[7 8] s4里面有3个元素,因为ss4长度为2 所以这里只拷贝了2个元素

相关推荐
专注于大数据技术栈11 分钟前
java学习--LinkedHashSet
java·开发语言·学习
这个图像胖嘟嘟13 分钟前
前端开发的基本运行环境配置
开发语言·javascript·vue.js·react.js·typescript·npm·node.js
星竹晨L1 小时前
【C++内存安全管理】智能指针的使用和原理
开发语言·c++
宵时待雨1 小时前
数据结构(初阶)笔记归纳3:顺序表的应用
c语言·开发语言·数据结构·笔记·算法
旺仔小拳头..1 小时前
Java ---变量、常量、类型转换、默认值、重载、标识符、输入输出、访问修饰符、泛型、迭代器
java·开发语言·python
lsx2024061 小时前
Vue3 自定义指令
开发语言
牛奔1 小时前
Go语言中结构体转Map优雅实现
开发语言·后端·macos·golang·xcode
wujj_whut1 小时前
【Conda实战】从0到1:虚拟环境创建、多Python版本管理与环境切换全指南
开发语言·python·conda
蜗牛^^O^2 小时前
java中的JUC
java·开发语言
张心独酌2 小时前
Rust新手练习案例库- rust-learning-example
开发语言·后端·rust