三天Golang快速入门—Slice切片
三天Golang快速入门—Slice切片
- Slice切片
- 切片原理
- 切片遍历
- append函数操作切片
- append添加
- append追加多个
- 切片中删除元素
- 切片合并
- string和slice的联系
Slice切片
切片原理
- 由三个部分构成,指针、长度、容量
- 指针:指向slice第一个元素对应的数组元素的地址
- 长度:slice元素的数量,不能超过容量
- 容量:selice开始的位置到底层数据的结尾
package mainimport "fmt"func main() {//创建一个数组var array1 [5]int = [...]int{11, 22, 33, 44, 55}/*创建切片,通过对数组的索引切片s1是切片名array1[1:3]代表slice引用数组区间,索引1到索引3的值,注意取头不取尾,*/s1 := array1[1:4]fmt.Println(array1)fmt.Println(s1)fmt.Println(len(s1))fmt.Println(cap(s1))}
//结果
[11 22 33 44 55] //原本数组
[22 33 44] //切片的值
3 //切片元素长度
4 //切片容量
需要说明:slice并不是数组或数组指针。只是通过内部指针和相关属性引用数组片段,实现可动态变化的序列。所以切片只是对数组的一个引用,是引用类型
//1.声明切片
var a []int
//2. 类型推导声明并初始化切片
b := []int{}
//3. make创建切片
// 内置make函数,参数(类型,len,cap)cap必须大于len,容量可以省略,默认等于长度
var c []int = make([]int,0)
//4.从数组切片
d := [5]int{1,2,3,4,5}
var d2 []int
d2 = d[1:4]
切片遍历
和数组的变量是一样的
package mainimport "fmt"func main() {arr := [5]int{11, 22, 33, 44, 55}s1 := arr[1:4]// for循环for i := 0; i < len(s1); i++ {fmt.Printf("s1[%v]=%v\n", i, s1[i])}fmt.Println()// for range方式for i, v := range s1 {fmt.Printf("索引i=%v 值v=%v\n", i, v)}}
append函数操作切片
- append可以为切片动态添加元素,每个切片会指向一个底层数组
- 当底层数组不能容纳新增的元素时,切片会自动进行扩容,重新指向一个新的底层数据,且以2倍的容量重新分配数组
append添加
package mainimport "fmt"func main() {var numSlice []intfor i := 0; i < 10; i++ {numSlice = append(numSlice, i)fmt.Printf("%v len:%d cap:%d ptr:%p\n", numSlice, len(numSlice),cap(numSlice), numSlice)}}
/*
[0] len:1 cap:1 ptr:0xc0000140a8
[0 1] len:2 cap:2 ptr:0xc0000140f0
[0 1 2] len:3 cap:4 ptr:0xc00000e200
[0 1 2 3] len:4 cap:4 ptr:0xc00000e200
[0 1 2 3 4] len:5 cap:8 ptr:0xc000018280
[0 1 2 3 4 5] len:6 cap:8 ptr:0xc000018280
[0 1 2 3 4 5 6] len:7 cap:8 ptr:0xc000018280
[0 1 2 3 4 5 6 7] len:8 cap:8 ptr:0xc000018280
[0 1 2 3 4 5 6 7 8] len:9 cap:16 ptr:0xc000102000
*/
append追加多个
package mainimport "fmt"func main() {var citySlice []stringcitySlice = append(citySlice, "上海") // 追加一个元素citySlice = append(citySlice, "北京", "广州", "杭州") // 追加多个元素a := []string{"成都", "重庆"}citySlice = append(citySlice, a...) // 追加切片fmt.Println(citySlice)
}
/*
[上海 北京 广州 杭州 成都 重庆]
*/
切片中删除元素
package mainimport "fmt"func main() {a := []int{10, 11, 20, 21, 22, 40}a = append(a[:2], a[3:]...) //删除索引为2的元素fmt.Println(a)
}
//[10 11 21 22 40]
切片合并
package mainimport "fmt"func main() {a1 := []int{2, 4, 8}a2 := []int{1, 3, 7}a1 = append(a1, a2...)fmt.Println(a1)
}
//[2 4 8 1 3 7]
string和slice的联系
//string底层就是byte数组 因此string同样可以进行切片处理
package main
import "fmt"
func main() {str1 := "yugo niubi"//对str1进行切片s1 := str1[:4]fmt.Println(s1)//yugo
}2)stirng修改的两种方式
package main
import ("fmt"
)
func main() {str1 := "yugo niubi"//string是不可变的,也无法通过切片修改值//str1[0] = 's' 编译器失败//修改string的方法,需要string转化为[]byte,修改后转为stringarr1 := []byte(str1) //类型强转arr1[0] = 'g'str1 = string(arr1)fmt.Printf("str1=%v\n", str1)//[]byte只能处理英文和数字,不能处理汉字,汉字3个字节,会出现乱码//将string转为[]rune,按字符处理,兼容汉字arr2 := []rune(str1)arr2[0] = '于'str1 = string(arr2)fmt.Printf("str1=%v\n", str1)
}
相关文章:
三天Golang快速入门—Slice切片
三天Golang快速入门—Slice切片Slice切片切片原理切片遍历append函数操作切片append添加append追加多个切片中删除元素切片合并string和slice的联系Slice切片 切片原理 由三个部分构成,指针、长度、容量指针:指向slice第一个元素对应的数组元素的地址长…...
腾讯会议演示者视图/演讲者视图
前言 使用腾讯会议共享PPT时,腾讯会议支持共享用户使用演示者视图/演讲者视图,而会议其他成员可以看到正常的放映视图。下面以Win10系统和Office为例,介绍使用步骤。值得一提的是,该方法同时适用于单显示屏和多显示屏。 腾讯会议…...
【C++】类与对象(一)
文章目录1、面向过程和面向对象初步认识2、类的引入3、类的定义4、类的访问限定符5、类的作用域6、类的实例化7、计算类对象的大小8、this指针9、 C语言和C实现Stack的对比1、面向过程和面向对象初步认识 C语言是面向过程的,关注的是过程,分析出求解问题…...
JavaScript基本语法
本文提到的绝大多数语法都是与Java不同的语法,相同的就不会赘述了.JavaScript的三种引入方式内部js<body><script>alert(hello);</script> </body>行内js<body><div onclick"alert(hello)">这是一个div 点击一下试试</div>…...
OpenCV4.x图像处理实例-道路车辆检测(基于背景消减法)
通过背景消减进行道路车辆检测 文章目录 通过背景消减进行道路车辆检测1、车辆检测思路介绍2、BackgroundSubtractorMOG23、车辆检测实现在本文中,将介绍如何使用简单但有效的背景-前景减法方法执行车辆检测等任务。本文将使用 OpenCV 中使用背景-前景减法和轮廓检测,以及如何…...
pwnlab通关流程
pwnlab通关 关于文件包含,环境变量劫持的一个靶场 信息收集 靶机ip:192.168.112.133 开放端口 根据开放的端口信息决定从80web端口入手 目录信息 在images和upload路径存在目录遍历,config.php被渲染无法查看,upload.php需…...
面向过程与面向对象的区别与联系
目录 什么是面向过程 什么是面向对象 区别 各自的优缺点 什么是面向过程 面向过程是一种以事件为中心的编程思想,编程的时候把解决问题的步骤分析出来,然后用函数把这些步骤实现,在一步一步的具体步骤中再按顺序调用函数。 什么是面向对…...
主机状态(查看资源占用情况、查看网络占用情况)
1. 查看资源占用情况 【1】可以通过top命令查看cpu、内存的使用情况,类似windows的任务管理器 默认5s刷新一次 语法:top 可 Ctrl c 退出 2.磁盘信息监控 【1】使用df命令,查看磁盘信息占用情况 语法:df [ -h ] 以更加人性化…...
代码随想录算法训练营第四十一天 | 01背包问题-二维数组滚动数组,416. 分割等和子集
一、参考资料01背包问题 二维 https://programmercarl.com/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-1.html 视频讲解:https://www.bilibili.com/video/BV1cg411g7Y6 01背包问题 一维 https://programmercarl.com/%E8%83%8C%E5…...
VMware NSX 4.1 发布 - 网络安全虚拟化平台
请访问原文链接:VMware NSX 4 - 网络安全虚拟化平台,查看最新版。原创作品,转载请保留出处。 作者主页:www.sysin.org VMware NSX 提供了一个敏捷式软件定义基础架构,用来构建云原生应用程序环境。NSX 专注于为具有异…...
计算理论 复杂度预备知识
文章目录计算理论 复杂度预备知识符号递归表达式求解通项公式主方法Akra-Bazzi 定理计算理论 复杂度预备知识 符号 f(n)o(g(n))f(n)o(g(n))f(n)o(g(n)) :∃c\exists c∃c ,当 nnn 足够大时, f(n)<cg(n)f(n)\lt cg(n)f(n)<cg(n) &#…...
二叉树——二叉搜索树中的插入操作
二叉搜索树中的插入操作 链接 给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。 注意,…...
C# if break,if continue,if return的区别和使用
故事部分: 现在你肚子饿了,想要去: 1.吃个三菜一汤。 2.吃个蛋糕。 3.喝个奶茶。 结果,你吃饭的时候,吃到一个虫子。 你会有几种做法? 1.把有虫子这道菜拿走,继续吃下一道菜 。 2.算了ÿ…...
力扣-第二高的薪水
大家好,我是空空star,本篇带大家了解一道中等的力扣sql练习题。 文章目录前言一、题目:176. 第二高的薪水二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.其他总结…...
I - 太阳轰炸(组合数学Cnk n固定)
2023河南省赛组队训练赛(二) - Virtual Judge (vjudge.net) 背景:阿塔尼斯,达拉姆的大主教,在艾尔又一次沦陷之后指挥着星灵的最后一艘方舟舰:亚顿之矛。作为艾尔星灵数千年来的智慧结晶,亚顿之…...
centos安装gitlab
更新系统 sudo yum -y update安装所需要的包 sudo yum -y install epel-release curl vim policycoreutils-python如果要安装并使用本地Postfix服务器发送通知,请安装Postfix,这里就不安装了: sudo yum -y install postfix安装后启动并启用…...
【洛谷 P1093】[NOIP2007 普及组] 奖学金 题解(结构体排序)
[NOIP2007 普及组] 奖学金 题目描述 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前 555 名学生发奖学金。期末,每个学生都有 333 门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再…...
【Hello Linux】进程优先级和环境变量
作者:小萌新 专栏:Linux 作者简介:大二学生 希望能和大家一起进步! 本篇博客简介:简单介绍下进程的优先级 环境变量 进程优先级环境变量进程的优先级基本概念如何查看优先级PRI与NINI值的设置范围NI值如何修改修改方式…...
日期:Date,SimpleDateFormat常见API以及包装类
一.Date类 package com.gch.d1_date;import java.util.Date;/**目标:学会使用Date类处理时间,获取时间的信息*/ public class DateDemo1 {public static void main(String[] args) {// 1.创建一个Date类的对象:代表系统此刻日期时间对象Date d new Date();System.out.println(…...
嵌入式之ubuntu终端操作与shell常用命令详解
目录 文件和目录列表 基本列表功能 显示列表长度 过滤输出列表 浏览文件系统 Linux 文件系统 遍历目录 处理文件 创建文件 复制文件 制表键自动补全 重命名文件 删除文件 处理目录 创建目录 删除目录 编辑其他常用命令与操作 Uname命令 clear命令 返回上一级命令 显…...
【Shell学习笔记】6.Shell 流程控制
前言 本章介绍Shell的流程控制。 Shell 流程控制 和 Java、PHP 等语言不一样,sh 的流程控制不可为空,如(以下为 PHP 流程控制写法): 实例 <?php if (isset($_GET["q"])) {search(q); } else {// 不做任何事情 }在 sh/bash…...
27k入职阿里测开岗那天,我哭了,这5个月付出的一切总算没有白费~
先说一下自己的个人情况,计算机专业,16年普通二本学校毕业,经历过一些失败的工作经历后,经推荐就进入了华为的测试岗,进去才知道是接了个外包项目,不太稳定的样子,可是刚毕业谁知道什么外包不外…...
服务端开发之Java备战秋招面试篇5
努力了那么多年,回头一望,几乎全是漫长的挫折和煎熬。对于大多数人的一生来说,顺风顺水只是偶尔,挫折、不堪、焦虑和迷茫才是主旋律。我们登上并非我们所选择的舞台,演出并非我们所选择的剧本。继续加油吧! 目录 1.ArrayList与LinkedList区别, 应用场景…...
有趣的 Kotlin 0x11: joinToString,你真的了解嘛?
前言 之前使用 joinToString 函数也就是用逗号连接集合元素形成字符串,也没有细看它的参数,但是今天和 ChatGPT 聊天时,发现它给我输出了诸多内容。 joinToString joinToString()是Kotlin中一个非常有用的函数,它可以将集合的元…...
代码随想录算法训练营day46 | 动态规划之背包问题 139.单词拆分
day46139.单词拆分1.确定dp数组以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp[i]139.单词拆分 题目链接 解题思路:单词就是物品,字符串s就是背包,单词能否组成字符串s,就是问物品能不能把背包装满。…...
DPDK中的无锁共享数据结构
目录背景解决方法共享内存无锁操作新/老共享数据结构rte_ringrefcnt延迟释放方法1:读的线程来释放方法2:释放线程等到读线程轮询一轮参考背景 dpvs多线程,如何做到节约内存、高性能之间的均衡。 解决方法 共享内存 多线程共享内存&#x…...
【使用两个栈实现队列】
文章目录一、栈和队列的基本特点二、基本接口函数的实现1.栈的接口2.创建队列骨架3.入队操作4.取出队列元素5.返回队首元素6.判断队列是否为空7.销毁队列总结一、栈和队列的基本特点 栈的特点是后进先出,而队列的特点是先进先出。 使用两个栈实现队列,必…...
web,h5海康视频接入监控视频流记录一
项目需求,web端实现海康监控视频对接接入,需实现实时预览,云台功能,回放功能。 web端要播放视频,有三种方式,一种是装浏览器装插件,一种是装客户端exe,还有就是无插件了。浏览器装插…...
做毕业设计,前端部分你需要掌握的6个核心技能
其实前端新手如果想要自己实现一套毕业设计项目并非简单的事,因为之前很多人一直还停留在知识点的阶段,而且管理系统和C端网站都需要开发,但现在需要点连成线了。所以在启动项目开发之前呢,针对前端部分,我列举一些非常…...
Read book Netty in action(Chapter VIII)--EventLoop and thread model
前言 简单地说,线程模型指定了操作系统、编程语言、框架或者应用程序的上下文中的线程管理的关键方面。显而易见地,如何以及何时创建线程将对应用程序代码的执行产生显著的影响,因此开发人员需要理解与不同模型相关的权衡。无论是他们自己选…...
免费空间的个人网站/企业网站的推广阶段
1. em em是个相对单位,相对的是最近的父节点,如有下代码 <style>.parent{font-size:50px;}.child{font-size:0.5em;} </style> <div classparent><div classchild></div> </div> 子节点的字体大小是最近的那个父节点…...
日本室内设计网站推荐/关键词推广优化
在放映电影的过程中,画面被一幅幅地放映在银幕上。画幅移开时,光线就被遮住,幕上便出现短暂的黑暗;每放映一个画幅后,幕上就黑暗一次。但这一次次极短暂的黑暗,被人的视觉生理现象“视觉暂留”所弥补。人眼…...
aspcms做双语网站修改配置/东莞网站制作公司联系方式
1. 1.js事项编程式跳转 2.在onload生命周期函数中接受参数 3. 调试接口请求必须是https协议,调试阶段可以设置不校验就可以用:...
温州微网站制作电话/武汉网站seo公司
关于JavaScript中this指向问题 js中,this在不同情况下指向对象很复杂,分成很多种情况。 this指向window情况 注意:所有this指向window的情况,在严格模式下,this值为undefined 严格模式下,apply(),call()…...
网站开发时间进度/百度公司官网入口
笔记本电脑很难以有意义的方式进行升级。在许多情况下,处理器,母板和视频卡都是直接焊接在主板上的。如果一个组件发生故障,则不能简单地将其替换掉-您需要更换整个主板,这可能要花许多的钱。通常,您可以手动升级的唯一…...
上海建筑建材业网招标/廊坊百度关键词优化怎么做
Vue 包含一组观察数组的变异方法,所以它们也将会触发视图更新。这些方法如下: push()pop()shift()unshift()splice()sort()reverse() 都有什么功能?动手试验了一下: <body><div id"app"><div>push方…...