切片与数组类似,但更强大和灵活。与数组一样,切片也用于在单个变量中存储相同类型的多个值。然而,与数组不同的是,切片的长度可以根据需要增长和缩小。在 Go 中,有几种创建切片的方法:

  1. 使用[]datatype{values}格式
  2. 从数组创建切片
  3. 使用 make()函数

使用 []datatype{values}格式创建切片

语法:

slice_name := []datatype{values}

一个常见的声明切片的方式如下:

myslice := []int{}

上面的代码声明了一个空切片,长度为 0,容量为 0。

要在声明时初始化切片,可以使用以下方式:

myslice := []int{1, 2, 3}

上面的代码声明了一个长度为 3 的整数切片,容量也为 3。在 Go 中,有两个函数可以用来返回切片的长度和容量:

  • len() 函数:返回切片的长度(切片中元素的数量)
  • cap() 函数:返回切片的容量(切片可以增长或缩小到的元素数量)

示例:

package main

import (
"fmt"
) func main() {
myslice1 := []int{}
fmt.Println(len(myslice1))
fmt.Println(cap(myslice1))
fmt.Println(myslice1) myslice2 := []string{"Go", "切片", "很", "强大"}
fmt.Println(len(myslice2))
fmt.Println(cap(myslice2))
fmt.Println(myslice2)
}

结果:

0
0
[]
4
4
[Go 切片 很 强大]

在上面的示例中,第一个切片 myslice1 中未指定实际元素,因此切片的长度和容量都为零。而第二个切片 myslice2 中指定了元素,因此长度和容量都等于实际元素的数量。

从数组创建切片

可以通过对数组进行切片来创建切片:

语法:

var myarray = [length]datatype{values} // 一个数组
myslice := myarray[start:end] // 从数组创建的切片

示例:

package main

import (
"fmt"
) func main() {
arr1 := [6]int{10, 11, 12, 13, 14, 15}
myslice := arr1[2:4] fmt.Printf("myslice = %v\n", myslice)
fmt.Printf("length = %d\n", len(myslice))
fmt.Printf("capacity = %d\n", cap(myslice))
}

结果:

myslice = [12 13]
length = 2
capacity = 4

在上面的示例中,myslice 是一个长度为 2 的切片,它是从长度为 6 的数组 arr1 创建的。切片从数组的第二个元素(值为 12)开始,可以增长到数组的末尾,因此切片的容量为 4。

如果 myslice 从数组的第一个元素开始,切片的容量将为 6。

使用 make() 函数创建切片

也可以使用 make() 函数来创建切片:

语法:

slice_name := make([]type, length, capacity)

注意:如果不定义容量参数,容量将等于长度。

示例:

package main

import (
"fmt"
) func main() {
myslice1 := make([]int, 5, 10)
fmt.Printf("myslice1 = %v\n", myslice1)
fmt.Printf("length = %d\n", len(myslice1))
fmt.Printf("capacity = %d\n", cap(myslice1)) // 省略容量参数
myslice2 := make([]int, 5)
fmt.Printf("myslice2 = %v\n", myslice2)
fmt.Printf("length = %d\n", len(myslice2))
fmt.Printf("capacity = %d\n", cap(myslice2))
}

结果:

myslice1 = [0 0 0 0 0]
length = 5
capacity = 10
myslice2 = [0 0 0 0 0]
length = 5
capacity = 5

这个示例演示了如何使用 `make()` 函数创建切片。希望这篇文章有助于你理解 Go 中切片的概念和用法。

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎 点赞、收藏、关注

Go 语言中切片的使用和理解的更多相关文章

  1. C语言中关于逗号运算符的理解

    在C语言中运算符有很多,包括算数运算符.关系运算符.赋值运算符.位运算符.逻辑运算符.三目运算符.sizeof运算符.逗号运算符等等,那今天我们就重点来给大家讨论一下关于逗号运算符的一些运算规则. 首 ...

  2. Go语言中切片的内部实现和基础功能

    切片是一种数据结构,这种数据结构便于使用和管理数据集合.切片是围绕动态数组的概念构建的,可以按需自动增长和缩小.切片的动态增长是通过内置函数append来实现的.这个函数可以快速且高效的增长切片.还可 ...

  3. 谈谈自己对C语言中函数指针的一些理解 (第一次写博客,有点小兴奋哈)

    1.函数指针声明的格式及简单的使用 (1)格式:(返回值)(*函数指针名)(参数列表)    例如:声明一个无参数无返回值的函数指针(void)(*p)(void). (2)将函数指针指向某个无参数无 ...

  4. c语言中对字段宽度的理解?

    /************************************************************************* > File Name: printf.c ...

  5. go语言中的数组切片:特立独行的可变数组

    go语言中的数组切片:特立独行的可变数组 初看go语言中的slice,觉得是可变数组的一种很不错的实现,直接在语言语法的层面支持,操作方面比起java中的ArrayList方便了许多.但是在使用了一段 ...

  6. Go语言中的切片(十)

    go中数组的长度是固定的,且不同长度的数组是不同类型,这样的限制带来不少局限性.于是切片就来了,切片(Slice)是一个拥有相同类型元素的可变长度的序列.它是基于数组类型做的一层封装.它非常灵活,支持 ...

  7. 深入理解C语言中的指针与数组之指针篇

    转载于http://blog.csdn.net/hinyunsin/article/details/6662851     前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本 ...

  8. 【转载】理解C语言中的关键字extern

    原文:理解C语言中的关键字extern 最近写了一段C程序,编译时出现变量重复定义的错误,自己查看没发现错误.使用Google发现,自己对extern理解不透彻,我搜到了这篇文章,写得不错.我拙劣的翻 ...

  9. 对于C语言中数组名是指针的理解

    我们都知道,c语言中数组名是一个指针,比如下面这段代码 #include<iostream>using namespace std;int main(){ int a[4]={1,2,3, ...

  10. 深入理解C语言中的指针与数组之指针篇(转载)

    前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本所在.相信,任意一家公司如果想要考察一个人对C语言的理解,指针和数组绝对是必考的一部分. 但是之前一方面之前一直在忙各种事情 ...

随机推荐

  1. 名校AI课推荐 | MIT6.S191《深度学习导论》

    "连续开设5年,对新手友好.易于上手,参加课程的多数学生来自非计算机科学领域--" 推荐一门AI课程--MIT官方深度学习入门课程6.S191<深度学习导论(2022)> ...

  2. 机器学习策略篇:详解满足和优化指标(Satisficing and optimizing metrics)

    满足和优化指标 要把顾及到的所有事情组合成单实数评估指标有时并不容易,在那些情况里,发现有时候设立满足和优化指标是很重要的,让我告诉是什么意思吧. 假设已经决定很看重猫分类器的分类准确度,这可以是\( ...

  3. Java package(包) +import 关键字(2)

    1 package com.bytezero.exer; 2 3 import java.lang.reflect.Field; 4 5 //import java.util.ArrayList; 6 ...

  4. 酷睿i5与i7处理器有什么区别

    本文将深入解析酷睿i5与i7处理器的区别,帮助您做出明智的购买决策.购买笔记本之前,了解处理器相关知识至关重要. 处理器作为电脑的核心部件,其性能直接影响整机运行速度和效率. 市面上主流的笔记本处理器 ...

  5. [学习笔记]Linux + Nginx环境下部署 Web 站点

    ​部署后端程序,请阅读: [学习笔记]Linux环境下部署 .Net5 程序 - 林晓lx - 博客园 (cnblogs.com) 打包项目 以Vue项目为例,首先打包站点,前往项目的根目录并键入: ...

  6. nginx Host值设置

    $server_port :nigix监听的端口 $proxy_port : 服务器真正访问的端口 #设置请求头"Host"值(为入口域名和端口) proxy_set_header ...

  7. 从零开始写 Docker(六)---实现 mydocker run -v 支持数据卷挂载

    本文为从零开始写 Docker 系列第六篇,实现类似 docker -v 的功能,通过挂载数据卷将容器中部分数据持久化到宿主机. 完整代码见:https://github.com/lixd/mydoc ...

  8. day10-Spring Cloud Alibaba Nacos-服务注册与配置中心

    Spring Cloud Alibaba Nacos-服务注册与配置中心 官网:https://github.com/alibaba/nacos,Nacos官方中文手册 Nacos:Spring Cl ...

  9. sourceTree Mac 跳过注册 安装

    打开sourcetree 关闭sourcetree 命令终端输入defaults write com.torusknot.SourceTreeNotMAS completedWelcomeWizard ...

  10. 【732. 我的日程安排表 III】差分数组

    class MyCalendarThree { private TreeMap<Integer, Integer> cnt; public MyCalendarThree() { cnt ...