千家信息网

Slice的使用注意事项有哪些

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,本篇内容介绍了"Slice的使用注意事项有哪些"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!slic
千家信息网最后更新 2025年02月01日Slice的使用注意事项有哪些

本篇内容介绍了"Slice的使用注意事项有哪些"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

slice在Go中的使用,一起看看下面这段程序

package mainimport (    "fmt"    )func main() {    var array [10]int    var slice = array[5:6]    fmt.Println("lenth of slice: ", len(slice))    fmt.Println("capacity of slice: ", cap(slice))    fmt.Println(&slice[0] == &array[5])}
  • 这段程序我想说的是:main函数中定义了一个10个长度的整型数组array,然后定义了一个切片slice,切取数组的第6个元 素,最后打印slice的长度和容量,判断切片的第一个元素和数组的第6个元素地址是否相等。

  • 大家想想切片的第一个元素和数组的第6个元素相等吗,或许可以跑跑这段程序证明一下在往下面看结果,好了我也不卖关子啦,上面程序中slice跟据数组array创建,与数组共享存储空间,slice起始位置是array[5],长度为1,容量为5, slice[0]和array[5]地址相同。

接下来大家看看这段程序,试着自己跑一下程序,动手实践是最好的老师

package mainimport (    "fmt")func AddElement(slice []int, e int) []int {    return append(slice, e)    }func main() {    var slice []int    slice = append(slice, 1, 2, 3)    newSlice := AddElement(slice, 4)    fmt.Println(&slice[0] == &newSlice[0])}
  • 上面这段我想表达的是函数AddElement()接受一个切片和一个元素,把元素append进切片中,并返回切片。main()函数中定 义一个切片,并向切片中append 3个元素,接着调用AddElement()继续向切片append进第4个元素同时定义一个 新的切片newSlice。最后判断新切片newSlice与旧切片slice是否共用一块存储空间

  • 这段程序相信很多小伙伴都觉得append会有可能触发旧Slice的扩容,又不敢特别肯定吧,接着往下看"有可能"变为"肯定"啦:
    1.append函数执行时会判断切片容量是否能够存放新增元素,如果不能,则会重新申请存储空间,新存储空间将是原来的2倍或1.25倍(取决于扩展原空间大小),本例中实际执行了两次append操作,第一次空间增长到4,所以第二次append不会再扩容,所以新旧两个切片将共用一块存储空间。程序会输出"true"。

接着往下继续看这段程序会怎样输出,可以思考一下或者跑跑程序:

 package mainimport (    "fmt")func main() {    orderLen := 5    order := make([]uint16, 2 * orderLen)    pollorder := order[:orderLen:orderLen]    lockorder := order[orderLen:][:orderLen:orderLen]    fmt.Println("len(pollorder) = ", len(pollorder))    fmt.Println("cap(pollorder) = ", cap(pollorder))    fmt.Println("len(lockorder) = ", len(lockorder))    fmt.Println("cap(lockorder) = ", cap(lockorder))}

跑完上面的程序后带着疑问接着往下看会更好,整个人有一种豁然开朗的感觉,不信可以试试:

  1. 程序中定义一个长度为10的切片order,pollorder和lockorder分别是对order切片做了order[start,stop,max]操作生成的切片,最后程序分别打印pollorder和lockorder的容量和长度。

  2. order[start,stop,max]的意思是对order进行切片,新切片范围是[start, stop),新切片容量是max。order长度为2倍的orderLen,pollorder切片指的是order的前半部分切片,lockorder指的是order的后半部分切片,即原order分成了两段。所以,pollorder和lockerorder的长度和容量都是orderLen,即5。

"Slice的使用注意事项有哪些"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

程序 元素 空间 长度 容量 数组 存储 函数 输出 事项 注意事项 接下来 内容 地址 实际 更多 知识 肯定 开朗 相同 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 服务器ftp数据传输 区块链的信息存在什么数据库中 上海卓讯网络技术有限公司 源景软件开发有限公司 所有国家的网络安全法 服务器远程管理口怎么使用 网络安全实用技术第3版 现在哪个服务器cpu性价比最高 多通道录制服务器 延庆区技术软件开发一体化 阿里云最新数据库平台 广州服务软件开发方案 了解samba服务器功能 江西站网络安全监测装置 斑马网络技术入职背景调查 关系数据库六大特点 转录组数据库英文缩写 天津公交网络安全Rap 建立图像特征数据库 如何做网络技术 徽瀚网络技术服务有限公司官网 计算机网络技术在生活的影响 网络安全作业教育平台河南 数据库建立表创建数据的导出 奉化游戏软件开发设计 万方数据库旧版跟新版的区别 云服务器怎么添加显卡 软件开发软件培训价格 关系数据库六大特点 微信小程序的数据库太蠢了吧
0