Go切片的开闭原则

Go 切片的开闭原则

前言

今日在工作中踩了一个小坑,关于数组切片的,主要是切片开闭原则的,当年面试的时候考过,但是后来没有仔细研究,这里补足一下。

示例

1package main 2 3import "fmt" 4 5func main() { 6 //程序运行完成时一定要有输出语句,本工具才能正确展示运行结果。 7 arr := []int{0, 1, 2, 3, 4, 5, 6, 7, 8} 8 fmt.Printf("len: %d, cap: %d, %p, %+v\n", len(arr), cap(arr), arr, arr) 9 arr2 := arr[0:3] 10 fmt.Printf("len: %d, cap: %d, %p, %+v\n", len(arr2), cap(arr2), arr2, arr2) 11 arr3 := arr[1:3] 12 fmt.Printf("len: %d, cap: %d, %p, %+v\n", len(arr3), cap(arr3), arr3, arr3) 13 arr4 := arr[4:] 14 fmt.Printf("len: %d, cap: %d, %p, %+v\n", len(arr4), cap(arr4), arr4, arr4) 15}

Go Playground

len: 9, cap: 9, 0xc00010c000, [0 1 2 3 4 5 6 7 8]
len: 3, cap: 9, 0xc00010c000, [0 1 2]
len: 2, cap: 8, 0xc00010c008, [1 2]
len: 5, cap: 5, 0xc00010c020, [4 5 6 7 8]

总结

沟通一个切片的开闭,需要约定一个前提: 语境的开始从0开始,开始从1开始(通常情况从下标0开始)

  • 如果从0开始,那么左闭右开
  • 如果从1开始,那么 左开右毕

数组截取切片,关于切片内存地址

  • 如果下标从头开始截取(下标:0),则与远数组同一个指针
  • 如果下标非从头开始截取,则会产生一个新的内存指针

切片长度(len)与容量(cap

  • 长度为切片元素个数
  • 容量为截取位置开始至原数组结尾(类同arr[5:]

截取数组剩余所有

  • new := old[5:],使用 [start:] 的形式截取,推荐
  • new := old[5:len(old)-1],通过计算原数组长度,截取从开始下标至最后一个下标(由于下标从0开始,所以长度减一)

数组拷贝有更多的内容,所以不在这个话题聊了。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

设计模式–六大原则

设计模式–六大原则tex在238中设计模式中,我们提炼出了六大面向对象设计原则我们可以不知道那数量繁多的设计模式,但一定要记住这六大设计原则1.开闭原则(OpenClosePrinciple

设计模式面试

设计模式面试1.单例设计模式使用设计模式为了代码复用,增加可维护性。设计模式的六大原则:开闭原则、里氏代换原则、依赖倒转原则、接口隔离原则、迪米特法则(最少知道原则)、合成/聚合复用原则Singleton(创建):保证一个类仅

一篇文章彻底弄懂理解和高效运用切片(slice)

slice,中文多译为“切片”,是Go语言在数组之上提供的一个重要的抽象数据类型。在Go语言中,绝大多数需要使用数组的场合,切片都实现了完美替代。并且和数组相比,切片提供了更通用、功能更强大且便捷的数据序列访问接口。1.切片究竟是什么在对切片一探究竟之前,我们先来简略了解一下Go语言中的数组。Go语言数组是一个固定长度的、容纳同构类型元素的

Go切片的开闭原则 - HelloWorld