惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

量子位
WordPress大学
WordPress大学
小众软件
小众软件
云风的 BLOG
云风的 BLOG
IT之家
IT之家
人人都是产品经理
人人都是产品经理
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Last Week in AI
Last Week in AI
博客园 - 【当耐特】
T
Tailwind CSS Blog
阮一峰的网络日志
阮一峰的网络日志
V
V2EX
宝玉的分享
宝玉的分享
博客园 - Franky
F
Fortinet All Blogs
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
GbyAI
GbyAI
Hugging Face - Blog
Hugging Face - Blog
Jina AI
Jina AI
D
Docker
博客园 - 聂微东
C
Check Point Blog
H
Help Net Security

浮华生

Elasticsearch 检索性能优化 - 浮华生 舆情监控系统综述 - 浮华生 2024 半年度总结 - 浮华生 2023 年终总结 - 浮华生 异地机器组网方案 - 浮华生 Kubernetes 部署 Elasticsearch 和 Kibana - 浮华生 2022 年终总结 - 浮华生 RabbitMQ connection channel 的关系 - 浮华生 Kafka Java 客户端 Producer 原理分析 - 浮华生 RabbitMQ 和 Kafka 应用原理简单对比 - 浮华生 阿里云 OpenSearch 介绍 - 浮华生 Mac OS 下打造 golang nvim 编程环境之基础配置 - 浮华生 电商搜索技术总结 - 浮华生 电商搜索业务总结 - 浮华生 2021 年终总结 - 浮华生 Cypress 实践总结 - 浮华生 年终总结 - 浮华生 关于我 - 浮华生 使用 cucumber 进行行为驱动开发(BDD) - 浮华生 微服务应用集成 SpringCloud 步骤 - 浮华生 电商搜索数据同步方案 - 浮华生 通过一道数值转换题重温计算机补码 - 浮华生 macOS 系统推荐的一些软件 - 浮华生 DevOps 实施规划(持续更新) - 浮华生 rabbitmq 如何提高可靠性并保证消费端幂等 - 浮华生 AMQ Model总结 - 浮华生 结对编程 - 浮华生 RSocket 介绍 - 浮华生 面向对象的理解 - 浮华生 企业平台技术框架 - 浮华生
Golang Array 和 Slice 区别 - 浮华生
浮华生 · 2022-04-22 · via 浮华生

开始学习 Golang 时,对于 array 和 slice 的理解并不深入,还有很多疑惑的困扰着我。于是就深入的研究了一下。

Array 与 Slice 的 区别

  1. array 是固定长度的,声明时必须是常量大小,定义好后不可更改,更不会扩容,超出访问地址后会 panic;
  2. array 是值类型,将旧的 array 赋值给新的 array 相当于两个完全独立的 array;
  3. slice 是 struct 类型,可动态声明 length 和 capacity 大小,底层基于 array ,但是 slice 可以表示 array 的部分元素,修改 slice 内容会修改所引用 array 的值。

Array/Slice 的 len() 和 cap()

array 的 length 和 capacity 是相同的,不能进行扩容;

slice 中的 len():是指当前 slice 能够访问的元素;

slice 中的 cap():是指当前 slice 指针的开头到数组的最后一位,slice 使用 append 进行函数追加时,能够进行动态扩容

Slice 的 length 和 capacity 计算

1
2
3
4
5
arr := [3]int{1,2,3} // 假设此数组的 cap 为 k
sli := arr[i:j] // [i,j)
len: j - i
cap: k - i

Slice 扩容

Slice 的 len() 和 cap()

slice 中的 len():是指当前 slice 能够访问的元素;

slice 中的 cap():是指当前 slice 指针的开头到数组的最后一位

参考文档

https://go.dev/blog/slices