Go | 一分钟掌握Go | 5 - 切片

news2024/9/21 3:37:23

作者:Mars酱

声明:本文章由Mars酱编写,部分内容来源于网络,如有疑问请联系本人。

转载:欢迎转载,转载前先请联系我!

说明

切片和数组有点像,对于我的理解就是声明了固定长度的就是数组,而且数组不可扩展;否则就是切片

定义切片

定义切片可以直接定义,如下:

var sliceName []type

也可以使用make函数来定义:

var sliceName []type = make([]type, length)

// 可以简写为
sliceName := make([]type, length)

make函数的定义是这样的

make([]T, length, capacity)

[]T:T类型的切片

length:切片的长度

capacity:指定容量的大小

切片初始化

// 定义一个int型的切片,里面的值分别是1,2,3,4
sliceName := []int{1,2,3,4}

回忆下数组的定义:

var array = [4]int{1,2,3,4}

[]内有数字,表示的是数组;没有数字表示没有固定大小,就是切片。另外声明方式也不一样。

把数组切成片

我们把上面的array数组,变为切片,语法可以用:

sliceName := array[startIndex:endIndex]

我翻译下:

把array数组中从下标startIndex开始,直到到endIndex - 1的元素,定义为一个切片sliceName

startIndexendIndex都是可选参数,如果不写,默认分别表示第一个元素和最后一个元素,如:

// 从startIndex开始直到结束
sliceName := array[startIndex:]

切片变长

数组不可增加长度,但是切片可以,我们可以通过append函数往原切片里面增加

var number []int
// 往这个空切片中增加一个数字0
number = append(number, 0)

如果你想变得更长,可以这样:

number = append(number, 1,2,3,4,5)

整体代码:

import (
	"fmt"
	"testing"
)

// author: mars酱
func Test_slice2(t *testing.T) {
	var number []int
	fmt.Println(number)
	number = append(number, 0)
	fmt.Println(number)
	number = append(number, 1, 2, 3, 4, 5)
	fmt.Println(number)
}

运行结果:

append就是往指定切片里面不断的添加内容

切片互拷

使用copy函数可以把一个切片拷贝到另一个切片中去,语法:

copy(target, source)

target:目标切片

source:源切片

target := []int{3, 4, 5, 6, 7}
source := []int{1, 2}

copy(target, source)
fmt.Println("--- copy之后的结果 ---")
fmt.Println(source)
fmt.Println(target)

运行上面的,能得到什么?

source的值并没有改变

target的值的前两位变成了source的值

最后

切片是真的很灵活的,copy函数不太容易理解,我的理解实际是把源位置的值拷贝给目标位置的值,这应该就是java中的深层拷贝吧?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/462749.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

「 Redis 」RDB和AOF持久化全面解析

「 Redis 」RDB和AOF持久化全面解析 参考&鸣谢 【说透Redis】10分钟彻底理解Redis的持久化机制:RDB和AOF 程序员读书 AOF 持久化是怎么实现的? xiaolinCoding Redis持久化之RDB与AOF 的区别 1024下午茶 文章目录 「 Redis 」RDB和AOF持久化全面解析前…

设计模式之解释器模式(C++)

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 一、解释器模式是什么? 解释器模式是一种行为型的软件设计模式,定义了一个解释器,来解释给定语…

C语言函数大全-- q 开头的函数

C语言函数大全 本篇介绍C语言函数大全-- q 开头的函数 1. qsort 1.1 函数说明 函数声明函数功能void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));用于将指定数组按指定顺序进行排序 参数: base : 指…

2023年,企业如何做好团队知识管理?

团队知识管理是一个组织管理中非常重要的组成部分。成熟的企业通常会非常注重团队知识管理的实践,以提高团队的协作效率和整体绩效。本文将介绍成熟企业如何做好团队知识管理,以提高企业的竞争力和创新能力。 一、了解团队知识管理的重要性 团队知识管…

【网络进阶】五种IO网络模型(二)

文章目录 1. 多路复用IO2. 异步IO3. 信号驱动IO 1. 多路复用IO I/O多路复用这个术语可能对一些人来说比较陌生,但提到select/epoll,就容易理解了。在某些场景下,这种I/O方式也被称为事件驱动I/O(event-driven I/O)。我…

[Gitops--5]APISIX

APISIX Apache APISIX是一款开源的高性能,动态云原生网关.Apache APISIX当前已经覆盖了API网关,LB,Ingress,Service,Mesh等多种场景 1. APISIX部署 使用Helm Chart部署Apache APISIX Ingress Controller Apache APISIX Ingress Controller目前和Apache APISIX网关是强关联的…

基于html+css的图展示34

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

GoodSync 数据自动同步备份工具VS傲梅轻松备份系统数据备份工具 哪款更好?

备份和同步软件的使用越来越广泛,因为在这个数据驱动的时代,数据的备份和恢复非常重要。在这里我想向大家推荐两款备份和同步软件——GoodSync和傲梅轻松备份。 GoodSync是一款备份和同步软件,它可以在多个设备之间同步文件、文件夹、照片、音…

在电脑上剪辑视频用什么软件 如何在电脑上剪辑视频

工作中需要剪辑视频的场景越来越多了,视频剪辑已经成了打工人必备技能之一。但对很多新手小白来说,剪辑视频看起来比较困难,那可能是没有找到合适的软件和方法,下面就为大家介绍在电脑上剪辑视频用什么软件,如何在电脑…

Xcode14 设置Display Name不生效问题

一、前言 早在Xcode13苹果就对Info.plist做了一次大改革,新建的OC项目默认Info.plist文件是“空的”,Swift项目甚至干脆连Info.plist文件都没有了,苹果这样做是为了建立一个新的Info.plist管理方式,把Info.plist物理文件中的配置…

对数据库中存储的程序进行现代化改造,以使用 Amazon Aurora PostgreSQL 联合查询、pg_cron 和 Amazon Lambda

作为数据库迁移和现代化的一部分,您可以继续使用存储的程序和调度作业,将远程实例中的数据整合到集中式数据存储中。 Amazon Schema Conversion Tool(Amazon SCT)可帮助您将传统的 Oracle 和 SQL Server 函数转换为其等效的开源函…

PDF 预览和下载你是怎么实现的?

前言 在开发过程中要求对 PDF 类型的发票提供 预览 和 下载 功能,**PDF** 类型文件的来源又包括 H5 移动端 和 **PC 端**,而针对这两个不同端的处理会有些许不同,下文会有所提及。 针对 PDF 预览 的文章不在少数,但似乎都没有提…

排查和解决CentOS系统上Nacos服务启动报错“java.net.UnknownHostException: jmenv.tbsite.net“问题

背景 环境是CentOS7操作系统,nacos服务宕掉了,启动服务的时候报错。 Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.web.servlet.FilterRegistrationBean]: Factory method ‘di…

太酷啦,Transformer 的有效上下文长度可扩展至百万级

夕小瑶科技说 原创作者 | 智商掉了一地、iven 用 Recurrent Memory Transformer 架构:可输入长度取决于内存大小 Transformer 因其在自然语言处理领域的成功应用而备受瞩目,同时在计算机视觉领域的研究中,诸多的多模态大模型如 ViT、CLIP、BL…

iperf3使用教程

文章目录 简介1.下载2. 使用测试实例:案例一 TCP通信测试案例二:UDP测试案例三 传输东西进行测试 iperfs3简单使用样例 简介 iPerf3是用于主动测试IP网络上最大可用带宽的工具。它支持时序、缓冲区、协议(TCP,UDP,SCT…

软件测试方法——等价类划分法详解

1、等价类划分法的介绍和概念 划分 指互不相交的一组子集,这些子集的并是整个集合。 对测试的意义:完备性和无冗余性。 等价类 等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的,具有等…

23.4.25总结

复习了MYSQL数据库的主键和外键的知识: 在设计表时,可以通过外键这个按钮,更改Update rule(更新规则)和Delete rule(删除规则)。 外键行为 默认情况下是:NO ACTION、RESTRICT 两…

传统机器学习(七)支持向量机(1)超平面、SVM硬间隔、软间隔模型和损失函数

传统机器学习(七)支持向量机(1) 1 算法概述 1.1 超平面的理解 1.1.1 超平面公式 我们对“平面”概念的理解,一般是定义在三维空间中的,如下: 假设M和M0为平面上的两点,n为该平面的法向量,那么,通过下图…

4.25~~~~~

接着之前PE文件结构的预习 DOS 定位到NT 怎么操作的? 用的是e_lfanew,然后是相对于文件头的偏移量(也就是raw表示方法) 现在有个问题,为什么e_lfanew 这个变量不直接存储PE头 的绝对地址呢? 比如说&…

python 基础语法学习之变量与运算符

一、注释 注释: 就是对代码的解释,方便阅读,被注释的代码不执行 分类 单行注释 # 1.单行注释 以#号开头 ,右边的所有东西都被当做说明文字 ,程序不进行编译运行。 print(hello world)多行注释 # 2.多行注释 三个单引号 或…