当前位置: 首页 > news >正文

三天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切片 切片原理 由三个部分构成&#xff0c;指针、长度、容量指针&#xff1a;指向slice第一个元素对应的数组元素的地址长…...

腾讯会议演示者视图/演讲者视图

前言 使用腾讯会议共享PPT时&#xff0c;腾讯会议支持共享用户使用演示者视图/演讲者视图&#xff0c;而会议其他成员可以看到正常的放映视图。下面以Win10系统和Office为例&#xff0c;介绍使用步骤。值得一提的是&#xff0c;该方法同时适用于单显示屏和多显示屏。 腾讯会议…...

【C++】类与对象(一)

文章目录1、面向过程和面向对象初步认识2、类的引入3、类的定义4、类的访问限定符5、类的作用域6、类的实例化7、计算类对象的大小8、this指针9、 C语言和C实现Stack的对比1、面向过程和面向对象初步认识 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题…...

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通关 关于文件包含&#xff0c;环境变量劫持的一个靶场 信息收集 靶机ip&#xff1a;192.168.112.133 开放端口 根据开放的端口信息决定从80web端口入手 目录信息 在images和upload路径存在目录遍历&#xff0c;config.php被渲染无法查看&#xff0c;upload.php需…...

面向过程与面向对象的区别与联系

目录 什么是面向过程 什么是面向对象 区别 各自的优缺点 什么是面向过程 面向过程是一种以事件为中心的编程思想&#xff0c;编程的时候把解决问题的步骤分析出来&#xff0c;然后用函数把这些步骤实现&#xff0c;在一步一步的具体步骤中再按顺序调用函数。 什么是面向对…...

主机状态(查看资源占用情况、查看网络占用情况)

1. 查看资源占用情况 【1】可以通过top命令查看cpu、内存的使用情况&#xff0c;类似windows的任务管理器 默认5s刷新一次 语法&#xff1a;top 可 Ctrl c 退出 2.磁盘信息监控 【1】使用df命令&#xff0c;查看磁盘信息占用情况 语法&#xff1a;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 视频讲解&#xff1a;https://www.bilibili.com/video/BV1cg411g7Y6 01背包问题 一维 https://programmercarl.com/%E8%83%8C%E5…...

VMware NSX 4.1 发布 - 网络安全虚拟化平台

请访问原文链接&#xff1a;VMware NSX 4 - 网络安全虚拟化平台&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;www.sysin.org VMware NSX 提供了一个敏捷式软件定义基础架构&#xff0c;用来构建云原生应用程序环境。NSX 专注于为具有异…...

计算理论 复杂度预备知识

文章目录计算理论 复杂度预备知识符号递归表达式求解通项公式主方法Akra-Bazzi 定理计算理论 复杂度预备知识 符号 f(n)o(g(n))f(n)o(g(n))f(n)o(g(n)) &#xff1a;∃c\exists c∃c &#xff0c;当 nnn 足够大时&#xff0c; f(n)<cg(n)f(n)\lt cg(n)f(n)<cg(n) &#…...

二叉树——二叉搜索树中的插入操作

二叉搜索树中的插入操作 链接 给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和要插入树中的值 value &#xff0c;将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 &#xff0c;新值和原始二叉搜索树中的任意节点值都不同。 注意&#xff0c…...

C# if break,if continue,if return的区别和使用

故事部分&#xff1a; 现在你肚子饿了&#xff0c;想要去&#xff1a; 1.吃个三菜一汤。 2.吃个蛋糕。 3.喝个奶茶。 结果&#xff0c;你吃饭的时候&#xff0c;吃到一个虫子。 你会有几种做法&#xff1f; 1.把有虫子这道菜拿走&#xff0c;继续吃下一道菜 。 2.算了&#xff…...

力扣-第二高的薪水

大家好&#xff0c;我是空空star&#xff0c;本篇带大家了解一道中等的力扣sql练习题。 文章目录前言一、题目&#xff1a;176. 第二高的薪水二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.其他总结…...

I - 太阳轰炸(组合数学Cnk n固定)

2023河南省赛组队训练赛&#xff08;二&#xff09; - Virtual Judge (vjudge.net) 背景&#xff1a;阿塔尼斯&#xff0c;达拉姆的大主教&#xff0c;在艾尔又一次沦陷之后指挥着星灵的最后一艘方舟舰&#xff1a;亚顿之矛。作为艾尔星灵数千年来的智慧结晶&#xff0c;亚顿之…...

centos安装gitlab

更新系统 sudo yum -y update安装所需要的包 sudo yum -y install epel-release curl vim policycoreutils-python如果要安装并使用本地Postfix服务器发送通知&#xff0c;请安装Postfix&#xff0c;这里就不安装了&#xff1a; sudo yum -y install postfix安装后启动并启用…...

【洛谷 P1093】[NOIP2007 普及组] 奖学金 题解(结构体排序)

[NOIP2007 普及组] 奖学金 题目描述 某小学最近得到了一笔赞助&#xff0c;打算拿出其中一部分为学习成绩优秀的前 555 名学生发奖学金。期末&#xff0c;每个学生都有 333 门课的成绩:语文、数学、英语。先按总分从高到低排序&#xff0c;如果两个同学总分相同&#xff0c;再…...

【Hello Linux】进程优先级和环境变量

作者&#xff1a;小萌新 专栏&#xff1a;Linux 作者简介&#xff1a;大二学生 希望能和大家一起进步&#xff01; 本篇博客简介&#xff1a;简单介绍下进程的优先级 环境变量 进程优先级环境变量进程的优先级基本概念如何查看优先级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 等语言不一样&#xff0c;sh 的流程控制不可为空&#xff0c;如(以下为 PHP 流程控制写法)&#xff1a; 实例 <?php if (isset($_GET["q"])) {search(q); } else {// 不做任何事情 }在 sh/bash…...

27k入职阿里测开岗那天,我哭了,这5个月付出的一切总算没有白费~

先说一下自己的个人情况&#xff0c;计算机专业&#xff0c;16年普通二本学校毕业&#xff0c;经历过一些失败的工作经历后&#xff0c;经推荐就进入了华为的测试岗&#xff0c;进去才知道是接了个外包项目&#xff0c;不太稳定的样子&#xff0c;可是刚毕业谁知道什么外包不外…...

服务端开发之Java备战秋招面试篇5

努力了那么多年,回头一望,几乎全是漫长的挫折和煎熬。对于大多数人的一生来说,顺风顺水只是偶尔,挫折、不堪、焦虑和迷茫才是主旋律。我们登上并非我们所选择的舞台,演出并非我们所选择的剧本。继续加油吧&#xff01; 目录 1.ArrayList与LinkedList区别&#xff0c; 应用场景…...

有趣的 Kotlin 0x11: joinToString,你真的了解嘛?

前言 之前使用 joinToString 函数也就是用逗号连接集合元素形成字符串&#xff0c;也没有细看它的参数&#xff0c;但是今天和 ChatGPT 聊天时&#xff0c;发现它给我输出了诸多内容。 joinToString joinToString()是Kotlin中一个非常有用的函数&#xff0c;它可以将集合的元…...

代码随想录算法训练营day46 | 动态规划之背包问题 139.单词拆分

day46139.单词拆分1.确定dp数组以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp[i]139.单词拆分 题目链接 解题思路&#xff1a;单词就是物品&#xff0c;字符串s就是背包&#xff0c;单词能否组成字符串s&#xff0c;就是问物品能不能把背包装满。…...

DPDK中的无锁共享数据结构

目录背景解决方法共享内存无锁操作新/老共享数据结构rte_ringrefcnt延迟释放方法1&#xff1a;读的线程来释放方法2&#xff1a;释放线程等到读线程轮询一轮参考背景 dpvs多线程&#xff0c;如何做到节约内存、高性能之间的均衡。 解决方法 共享内存 多线程共享内存&#x…...

【使用两个栈实现队列】

文章目录一、栈和队列的基本特点二、基本接口函数的实现1.栈的接口2.创建队列骨架3.入队操作4.取出队列元素5.返回队首元素6.判断队列是否为空7.销毁队列总结一、栈和队列的基本特点 栈的特点是后进先出&#xff0c;而队列的特点是先进先出。 使用两个栈实现队列&#xff0c;必…...

web,h5海康视频接入监控视频流记录一

项目需求&#xff0c;web端实现海康监控视频对接接入&#xff0c;需实现实时预览&#xff0c;云台功能&#xff0c;回放功能。 web端要播放视频&#xff0c;有三种方式&#xff0c;一种是装浏览器装插件&#xff0c;一种是装客户端exe&#xff0c;还有就是无插件了。浏览器装插…...

做毕业设计,前端部分你需要掌握的6个核心技能

其实前端新手如果想要自己实现一套毕业设计项目并非简单的事&#xff0c;因为之前很多人一直还停留在知识点的阶段&#xff0c;而且管理系统和C端网站都需要开发&#xff0c;但现在需要点连成线了。所以在启动项目开发之前呢&#xff0c;针对前端部分&#xff0c;我列举一些非常…...

Read book Netty in action(Chapter VIII)--EventLoop and thread model

前言 简单地说&#xff0c;线程模型指定了操作系统、编程语言、框架或者应用程序的上下文中的线程管理的关键方面。显而易见地&#xff0c;如何以及何时创建线程将对应用程序代码的执行产生显著的影响&#xff0c;因此开发人员需要理解与不同模型相关的权衡。无论是他们自己选…...

免费空间的个人网站/企业网站的推广阶段

1. em em是个相对单位&#xff0c;相对的是最近的父节点&#xff0c;如有下代码 <style>.parent{font-size:50px;}.child{font-size:0.5em;} </style> <div classparent><div classchild></div> </div> 子节点的字体大小是最近的那个父节点…...

日本室内设计网站推荐/关键词推广优化

在放映电影的过程中&#xff0c;画面被一幅幅地放映在银幕上。画幅移开时&#xff0c;光线就被遮住&#xff0c;幕上便出现短暂的黑暗&#xff1b;每放映一个画幅后&#xff0c;幕上就黑暗一次。但这一次次极短暂的黑暗&#xff0c;被人的视觉生理现象“视觉暂留”所弥补。人眼…...

aspcms做双语网站修改配置/东莞网站制作公司联系方式

1. 1.js事项编程式跳转 2.在onload生命周期函数中接受参数 3. 调试接口请求必须是https协议,调试阶段可以设置不校验就可以用&#xff1a;...

温州微网站制作电话/武汉网站seo公司

关于JavaScript中this指向问题 js中&#xff0c;this在不同情况下指向对象很复杂&#xff0c;分成很多种情况。 this指向window情况 注意&#xff1a;所有this指向window的情况&#xff0c;在严格模式下&#xff0c;this值为undefined 严格模式下&#xff0c;apply(),call()…...

网站开发时间进度/百度公司官网入口

笔记本电脑很难以有意义的方式进行升级。在许多情况下&#xff0c;处理器&#xff0c;母板和视频卡都是直接焊接在主板上的。如果一个组件发生故障&#xff0c;则不能简单地将其替换掉-您需要更换整个主板&#xff0c;这可能要花许多的钱。通常&#xff0c;您可以手动升级的唯一…...

上海建筑建材业网招标/廊坊百度关键词优化怎么做

Vue 包含一组观察数组的变异方法&#xff0c;所以它们也将会触发视图更新。这些方法如下&#xff1a; push()pop()shift()unshift()splice()sort()reverse() 都有什么功能&#xff1f;动手试验了一下&#xff1a; <body><div id"app"><div>push方…...