首页 > 其他分享 >Go语言 切片slice

Go语言 切片slice

时间:2024-07-15 22:30:49浏览次数:12  
标签:slice 示例 fmt 切片 Println 长度 Go citys

本文内容为Go语言中切片(slice)概念、定义、特性及使用示例。

目录

切片(slice)

定义切片

不设置长度

追加数据

长度与容量

基于数组创建切片

常用切片方式

修改值

总结


切片(slice)

切片:slice,它的底层也是数组,是一种不定长的数组可以动态改变长度。

定义切片

定义一个切片,包含多个城市名称。

示例如下:

package main

import "fmt"

func main() {
   // 定义一个切片,包含多个城市名称
   citys := [10]string{"北京", "天津", "上海", "深圳", "重庆"}
   for key, val := range citys {
      fmt.Println(key, "=>", val)
   }
}

打印时除了前五个出现城市名外,其他的都是待填充的,显示空值。

不设置长度

还可以在定义切片时不设置长度。

示例如下:

citys := []string{"北京", "天津", "上海", "深圳", "重庆"}
for key, val := range citys {
   fmt.Println(key, "=>", val)
}

 

追加数据

在定义好的切片中追加数据。

示例如下:

fmt.Println("追加元素前,citys长度:", citys, ", 容量:", cap(citys))
citys = append(citys, "邯郸")
fmt.Println("追加元素后,citys长度:", citys, ", 容量:", cap(citys))

运行结果:

追加元素前,citys长度: [北京 天津 上海 深圳 重庆] , 容量: 5
追加元素后,citys长度: [北京 天津 上海 深圳 重庆 邯郸] , 容量: 10

长度与容量

对于一个切片,不仅有长度的概念len(),还有一个容量的概念cap()。

示例如下:

nums := []int{}
for i := 0; i < 10; i++ {
   nums = append(nums, i)
   fmt.Println("长度:", len(nums), ",容量:", cap(nums))
}

运行结果:

长度: 1 ,容量: 1
长度: 2 ,容量: 2
长度: 3 ,容量: 4
长度: 4 ,容量: 4
长度: 5 ,容量: 8
长度: 6 ,容量: 8
长度: 7 ,容量: 8
长度: 8 ,容量: 8
长度: 9 ,容量: 16
长度: 10 ,容量: 16

说明:切片可以使用append进行追加数据

len获取长度,cap获取容量

如果容量不足,再次追加数据时,会动态分配2倍空间

基于数组创建切片

对数组内容的引用,如果修改切片也会修改数组的值;

数组改变,切片值也会改变。

示例如下:

package main

import "fmt"

func main() {
   // 基于数组创建切片
   citys := [7]string{"北京", "天津", "上海", "深圳", "重庆", "开封", "哈尔滨"}

   // 基于citys创建一个新的数组
   city1 := [3]string{}
   city1[0] = citys[0]
   city1[1] = citys[1]
   city1[2] = citys[2]
   fmt.Println("新数组city1:", city1)

   // 切片可以基于一个数组,灵活的创建新的数组
   city2 := citys[0:3]
   fmt.Println("切片city2:", city2)

   // 数组改变,切片值也会随之修改。
   citys[0] = "北京1"
   fmt.Println(city1)
   fmt.Println(city2)
}

运行结果:

新数组city1: [北京 天津 上海]
切片city2: [北京 天津 上海]
[北京 天津 上海]
[北京1 天津 上海]

 

常用切片方式

如果从0元素开始截取,那么冒号左边的数字可以省略

示例如下:

citys := [10]string{"北京", "天津", "上海", "深圳", "唐山", "石家庄", "秦皇岛", "保定", "邯郸", "邢台"}
name1 := citys[:3]
fmt.Println(name1)

如果截取到数组最后一个元素,那么冒号右边的数字可以省略

示例如下:

citys := [10]string{"北京", "天津", "上海", "深圳", "唐山", "石家庄", "秦皇岛", "保定", "邯郸", "邢台"}
name2 := citys[3:6]
fmt.Println(name2)

如果想从左到右全部使用,那么冒号左右两边的数字都可以省略

示例如下:

citys := [10]string{"北京", "天津", "上海", "深圳", "唐山", "石家庄", "秦皇岛", "保定", "邯郸", "邢台"}
name3 := citys[:]
fmt.Println(name3)

也可以基于字符串进行切片截取。

示例如下:

str1 := "helloWorld"[3:5]
fmt.Println(str1) // lo

可以在创建空切片的时候,明确指定切片的容量,这样可以提高运行效率

创建一个容量是20,当前长度是0的string类型切片

示例如下:

str2 := make([]string, 10, 20) // 第三个参数不是必须的,如果没有填写,则默认与长度相同
fmt.Println("str2 长度:", len(str2), ", 容量:", cap(str2))
str2[0] = "hello"
str2[1] = "world"
fmt.Println("str2", str2)

如果想让切片完全的独立于原始数组,可以使用copy()函数实现

示例如下:

cityCopy := make([]string, len(citys))
copy(cityCopy, citys[:])
fmt.Println(cityCopy)

name[:]解释:函数原型接收参数时要求时切片,如果参数为数组,需要转换为切片

修改值

独立于数组的切片值进行修改,不会改变原有数组值。

示例如下:

cityCopy[0] = "呼和浩特"
fmt.Println("cityCopy:", cityCopy)
fmt.Println("citys:", citys)

总结

本文内容为Go语言中切片(slice)概念、定义、特性及使用示例。

标签:slice,示例,fmt,切片,Println,长度,Go,citys
From: https://blog.csdn.net/json_ligege/article/details/140450710

相关文章

  • 3D - 3D Slicer与NVIDIA Clara分割服务器进行集成
    设置3DSlicer与NVIDIAClara分割服务器进行集成可以通过几个步骤实现。以下是一个详细的指南,帮助你搭建并使用自己的分割服务器。前提条件3DSlicer:确保你已经安装了最新版本的3DSlicer。NVIDIAClaraDeploySDK:你需要安装并配置NVIDIAClaraDeploySDK和相关工具。Docke......
  • django实现用户的注册、登录、注销功能
    创建django项目的步骤:Django项目的创建步骤-CSDN博客一、前置工作配置数据库,设置数据库引擎为mysql1、在settings文件中找到DATABASES,配置以下内容DATABASES={"default":{'ENGINE':'django.db.backends.mysql',#数据库引擎'NAME':'dja......
  • 多源谱修复学习算法(Multi-source Spectral Repair Learning Algorithm, MSRL)
    多源谱修复学习算法(Multi-sourceSpectralRepairLearningAlgorithm,MSRL)是一种针对非完备多源数据的处理方法,旨在解决因数据缺失而导致的多源数据学习问题。非完备多源数据是指在数据采集过程中,由于各种原因(如数据源多样性带来的质量差异或数据获取能力限制),导致某些样......
  • 多源谱嵌入融合学习算法(Multi-source Spectral Embedding Fusion Learning Algorithm,
    多源谱嵌入融合学习算法(Multi-sourceSpectralEmbeddingFusionLearningAlgorithm,简称MSEF)是一种专门设计用于处理多源数据的高级学习方法,其目标是在不同数据源之间建立一致的表示,从而提高聚类性能和数据理解的全面性。这种算法的核心在于利用全局和局部谱嵌入的融合,以......
  • 启发式算法(Heuristic Algorithm)
    启发式算法(HeuristicAlgorithm)是一类用于解决复杂问题的算法,通过利用问题的某些特征和经验规则,在可接受的时间范围内找到较好的近似解。启发式算法不保证找到最优解,但通常可以在合理的计算时间内获得可行且质量较高的解。启发式算法的思想启发式算法的核心思想是通过利用......
  • Django 实践记录
    环境说明:mac11.3.1Django3.2.25python免费版3.7前置-安装python、pycharm(略)创建项目、创建虚拟环境pycharm创建项目、并创建好虚拟环境进入虚拟环境,安装Djangopipinstalldjango创建Django项目进入项目,创建Django项目django-adminstartprojectmyproject.......
  • 在 DjangoStarter 中集成 TailwindCSS
    前言好久没有更新技术文章了这个月开箱和随笔倒是写了不少,又忙又懒的基础的文章不太想写,稍微深入一点的又需要花很多时间来写虽然但是,最终还是想水一篇最近做了一个基于wagtail的项目,有不少东西可以记录。本文先记录一下把tailwindcss支持添加到DjangoStarter框架里使......
  • 基于Go1.19的站点模板爬虫
    一、go语言简介Go(也被称为Golang)是一种开源的编程语言,由Google公司于2007年开始开发,并在2009年对外公开发布。Go语言的设计目标是提供一种简单、高效、安全的编程语言,适合并发编程和网络编程。以下是Go语言的一些特点和优势:简单易学:Go语言的语法简洁明了,只有25个关键字,......
  • Django 模型字段类型和字段参数总结
    models.AutoField作用说明:默认生成列名为id的列,并设置为主键数据类型:int(11)必备参数:primary_key=True作为主键存在主键django会默认自带ColName=models.AutoField(primary_key=True)2.models.CharField作用说明:字符串字段,长度小于255数据类型:varchar(50)必......
  • goframe gfile用法
            GoFrame的 gfile  模块提供了一套丰富的文件和目录操作方法,使得文件系统的操作变得更加简单易用。以下是一些 gfile  的常用方法及其用法:1. 获取绝对路径:使用 Abs  函数可以获取给定路径的绝对表示形式,如果路径不是绝对路径,它会与当前工作目录......