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

 更新时间:2024年05月30日 10:17:06   作者:tekin  
这篇文章主要给大家介绍了关于go语言切片slice使用细节和注意事项整理的相关资料,需要的朋友可以参考下

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

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

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

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

slice := make([]string, 2) //定义cap容量为2的字符串切片
slice[0] = "hello"
slice[1] = "golang"

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

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

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

定义切片的3种方式:

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

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

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

切片使用细节注意事项

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

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

切片的拷贝 注意事项

切片使用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个元素

总结

到此这篇关于go语言切片slice使用细节和注意事项整理大全的文章就介绍到这了,更多相关go语言切片slice使用注意事项内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • go1.21中slog日志包用法入门

    go1.21中slog日志包用法入门

    go1.21中,slog这一被Go语言团队精心设计的结构化日志包正式落地,本文将带领读者上手slog,体会其与传统log的差异,感兴趣的小伙伴快跟随小编一起学习一下吧
    2023-09-09
  • Go语言字符串操作指南:简单易懂的实战技巧

    Go语言字符串操作指南:简单易懂的实战技巧

    本文将介绍Go语言中字符串的实战操作,通过本文的学习,读者将掌握Go语言中字符串的常用操作,为实际开发提供帮助,需要的朋友可以参考下
    2023-10-10
  • 一文读懂go中semaphore(信号量)源码

    一文读懂go中semaphore(信号量)源码

    这篇文章主要介绍了一文读懂go中semaphore(信号量)源码的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • Go语言线程安全之互斥锁与读写锁

    Go语言线程安全之互斥锁与读写锁

    这篇文章主要介绍了Go语言线程安全之互斥锁与读写锁,互斥锁是为了并发的安全,在多个goroutine共同工作的时候,对于共享的数据十分不安全,而读写锁效率革命,使用锁的时候,安全与效率往往需要互相转换,下文详细内容,需要的小伙伴可以参考一下
    2022-02-02
  • GO语言实现标题闪烁效果

    GO语言实现标题闪烁效果

    这篇文章主要介绍了GO语言实现标题闪烁效果,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • Golang语言如何高效拼接字符串详解

    Golang语言如何高效拼接字符串详解

    最近在做性能优化,有个函数里面的耗时特别长,看里面的操作大多是一些字符串拼接的操作,而字符串拼接在 golang 里面其实有很多种实现,下面这篇文章主要给大家介绍了关于Golang语言如何高效拼接字符串的相关资料,需要的朋友可以参考下
    2021-11-11
  • Go语言Zap库Logger的定制化和封装使用详解

    Go语言Zap库Logger的定制化和封装使用详解

    这篇文章主要介绍了Go语言Zap库Logger的定制化和封装使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • golang架构设计开闭原则手写实现

    golang架构设计开闭原则手写实现

    这篇文章主要为大家介绍了golang架构设计开闭原则手写实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • golang分层测试之http接口测试入门教程

    golang分层测试之http接口测试入门教程

    这篇文章主要介绍了golang分层测试之http接口测试入门教程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • Golang使用ttl机制保存内存数据方法详解

    Golang使用ttl机制保存内存数据方法详解

    ttl(time-to-live) 数据存活时间,我们这里指数据在内存中保存一段时间,超过期限则不能被读取到,与Redis的ttl机制类似。本文仅实现ttl部分,不考虑序列化和反序列化
    2023-03-03

最新评论