Golang开发:切片的两种创建方式及区别

在Go语言中,varmake都可以用来初始化切片(slice),但它们之间有一些重要的区别。

  1. 初始化方式

    • 使用var关键字声明的切片会被初始化为nil,即没有底层数组,长度为0,容量为0。
    • 使用make函数创建的切片会分配底层的数组,并返回具有指定长度(和可选的容量)的切片。
  2. 底层数组

    • 使用var声明的切片没有关联的底层数组,直到你向切片中添加了元素(通过append)或者明确地为它分配了一个底层数组。
    • 使用make创建的切片在创建时就已经有了底层数组。
  3. 性能和内存使用

    • 由于var声明的切片没有初始的底层数组,因此在你第一次向切片中添加元素时,Go会为其分配一个新的底层数组,这可能会导致额外的内存分配和复制操作。
    • 使用make创建的切片从一开始就具有底层数组,因此可以立即使用,避免了额外的内存分配和复制。
  4. 示例

使用var声明切片:

var mySlice []int
// 此时mySlice为nil,长度为0,容量为0

mySlice = append(mySlice, 1)
// 第一次append时,Go会分配一个底层数组来存储元素1

使用make创建切片:

mySlice := make([]int, 0, 5) // 创建一个长度为0但容量为5的切片
// 此时mySlice已经有了一个容量为5的底层数组,但长度为0

mySlice = append(mySlice, 1)
// 由于mySlice已经有了底层数组,这次append只是修改了切片的长度和可能的容量,没有额外的内存分配

在大多数情况下,如果你知道切片的大致大小或需要立即使用切片,使用make来创建切片会更高效。如果你只是声明一个切片并在稍后的某个时刻使用它,那么使用var声明也是可以的,但请注意第一次使用append时可能会导致的性能影响。

相关推荐

  1. Golang开发切片创建方式区别

    2024-05-16 07:20:12       31 阅读
  2. 创建springboot项目方式

    2024-05-16 07:20:12       39 阅读
  3. react-创建组件方式

    2024-05-16 07:20:12       39 阅读
  4. 创建空List方法

    2024-05-16 07:20:12       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-16 07:20:12       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-16 07:20:12       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-16 07:20:12       87 阅读
  4. Python语言-面向对象

    2024-05-16 07:20:12       96 阅读

热门阅读

  1. 分治算法(Divide-and-Conquer Algorithm)

    2024-05-16 07:20:12       34 阅读
  2. 软考:区分词法分析、语法分析、语义分析

    2024-05-16 07:20:12       40 阅读
  3. django 双下划线约定

    2024-05-16 07:20:12       36 阅读
  4. 爬虫部分知识点(1)

    2024-05-16 07:20:12       32 阅读
  5. 网站接入百度云防护CDN后回源率非常高原因

    2024-05-16 07:20:12       38 阅读
  6. Android使用SQLite数据库no such table 问题

    2024-05-16 07:20:12       33 阅读
  7. httpsUtils

    2024-05-16 07:20:12       25 阅读
  8. SSL VPN

    SSL VPN

    2024-05-16 07:20:12      30 阅读
  9. Home Assistant 添加SNMP协议UPS设备

    2024-05-16 07:20:12       34 阅读
  10. Android 获取视频缩略图

    2024-05-16 07:20:12       36 阅读