三天Golang快速入门—Slice切片

news2024/12/26 2:10:33

三天Golang快速入门—Slice切片

  • Slice切片
    • 切片原理
    • 切片遍历
    • append函数操作切片
      • append添加
      • append追加多个
      • 切片中删除元素
      • 切片合并
    • string和slice的联系

Slice切片

切片原理

  • 由三个部分构成,指针、长度、容量
  • 指针:指向slice第一个元素对应的数组元素的地址
  • 长度:slice元素的数量,不能超过容量
  • 容量:selice开始的位置到底层数据的结尾
package main

import "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 main

import "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 main

import "fmt"

func main() {
	var numSlice []int
	for 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 main

import "fmt"

func main() {
	var citySlice []string
	citySlice = append(citySlice, "上海")             // 追加一个元素
	citySlice = append(citySlice, "北京", "广州", "杭州") // 追加多个元素

	a := []string{"成都", "重庆"}
	citySlice = append(citySlice, a...) // 追加切片

	fmt.Println(citySlice)
}
/*
[上海 北京 广州 杭州 成都 重庆]
*/

切片中删除元素

package main

import "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 main

import "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,修改后转为string
    arr1 := []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)
}

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

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

相关文章

【数据聚类|深度聚类】Unsupervised Deep Embedding for Clustering Analysis(DEC)论文研读

DEC算法由两部分组成 第一部分会预训练一个SDAE模型;第二部分选取SDAE模型中的Encoder部分,加入聚类层,然后最小化KL散度进行训练聚类Absratct 提出了一种利用深度神经网络同时进行表征学习和聚类分配的方法,称之为深度嵌入聚类。该方法学习从数据空间到低纬空间的映射,并…

开发运维工具推荐 --- 解决远程访问局域网服务的问题。开发调试推荐

一、FastNat 可为您解决的问题1. 没公网服务器&#xff0c;需要发布本地的站点或网络程序到公网上&#xff0c;供他人访问&#xff1b;此项功能大大方面开发人员进行远程调试&#xff0c;微信小程序等开发工作进行。2. 需要远程到在其他网络中的设备&#xff0c;但两处的网络不…

Keettle (pdi-ce) 整库多表迁移(避坑)

使用开源免费 Keettle 工具 1.下载与安装 官网地址&#xff1a;下载 下载9.3.0以上的&#xff0c;6.1、7.1我都尝试过&#xff0c;6.1导致很多莫名其妙问题&#xff0c;7.1数据库可以连接和预览&#xff0c;迁移的时候就会出现事务读问题&#xff0c;最后解决这个问题后&…

探针台简介

探针台&#xff0c;是我们半导体实验室电学性能测试的常用设备&#xff0c;也是各大实验室以及芯片设计、封装测试的熟客。设备具备各项优势&#xff0c;高性能低成本&#xff0c;用途广&#xff0c;操作方便&#xff0c;在不同测试环境下&#xff0c;测试结果稳定&#xff0c;…

CV——day80 读论文:DLT-Net:可行驶区域、车道线和交通对象的联合检测

DLT-Net:可行驶区域、车道线和交通对象的联合检测I. INTRODUCTIONII. ANALYSIS OF PERCEPTIONIV. DLT-NETA. EncoderB. Decoder1) Drivable Area Branch(可行驶区域分支)2) Context Tensor(上下文张量)3) Lane Line Branch(车道线分支)4) Traffic Object Branch(目标检测对象分…

三天吃透Redis面试八股文

本文已经收录到Github仓库&#xff0c;该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点&#xff0c;欢迎star~ Github地址&#xff1a;https://github.com/…

Canvas入门-01

导读&#xff1a; 读完全文需要2min。通过这篇文章&#xff0c;你可以了解到以下内容&#xff1a; Canvas标签基本属性如何使用Canvas画矩形、圆形、线条、曲线、笑脸&#x1f60a; 如果你曾经了解过Canvas&#xff0c;可以对照目录回忆一下能否回答上来 毕竟带着问题学习最有效…

数据湖架构Hudi(三)Hudi核心概念

三、Apache Hudi核心概念 3.1 基本概念 Hudi 提供了Hudi 表的概念&#xff0c; 这些表支持CRUD操作&#xff0c; 可以利用现有的大数据集群比如HDFS做数据文件存储&#xff0c; 然后使用SparkSQL或Hive等分析引擎进行数据分析查询。 Hudi表的三个主要组件&#xff1a; 有序的…

JavaScript Number 数字对象

文章目录JavaScript Number 数字对象JavaScript 数字所有 JavaScript 数字均为 64 位精度八进制和十六进制无穷大&#xff08;Infinity&#xff09;NaN - 非数字值数字可以是数字或者对象数字属性数字方法JavaScript Number 数字对象 JavaScript 只有一种数字类型。 可以使用也…

书城项目—图书分页

图书分页 1. 分页模块的分析 2. 分页模型Page的抽取 public class Page<T> { public static final Integer PAGE_SIZE 4; // 当前页码 private Integer pageNo; // 总页码 private Integer pageTotal; // 当前页显示数量 private Integer pageSize PAGE_SIZE; // 总记…

数字映射:数字孪生技术的应用场景及作用

对于许多行业来说&#xff0c;数字孪生技术是未来。数字孪生定义数字孪生不仅仅是某物的副本或克隆&#xff0c;它是对象或系统的动态实时表示。数字孪生是一种虚拟模型&#xff0c;旨在准确反映物理对象。是物理对象、流程、服务或环境的数字表示&#xff0c;其行为和外观与现…

SCI 写作-Latex中算法排版

目录: 一、核心内容二、五个实例三、缩进控制一、核心内容 Latex 写作SCI中,经过会遇到算法的排版,以下给出5个实例。需要的宏包: \usepackage{algorithm} \usepackage{algorithmic} 二、五个实例 多角度介绍 algorithmic,algorithm 在算法排版中的使用。 (1)例1 \…

【Java基础】Java Lambda表达式详解

Lambda 表达式&#xff0c;即函数式编程是 JDK8 的一个新特性&#xff0c;也被称为闭包&#xff0c;Lambda表达式允许把函数作为一个方法的参数&#xff0c;即行为参数化&#xff0c;函数作为参数传递进方法中。Lambda表达式可以取代大部分的匿名内部类&#xff0c;写出更优雅的…

前端开发规范,你真的了解吗?一起来学习一下前端开发规范,让你的代码高级起来!

代码规范 1 编码风格规范 1.1 使用ES6风格编码源码 定义变量使用let ,定义常量使用const 使用export &#xff0c;import 模块化 1.2 组件 props 原子化 提供默认值 使用 type 属性校验类型 使用 props 之前先检查该 prop 是否存在 1.3 避免 this.$parent 1.4 谨慎使用 …

文献阅读(46)——MPViT

文献阅读&#xff08;46&#xff09;——MPViT 文章目录文献阅读&#xff08;46&#xff09;——MPViTMPViT先验知识/知识拓展文章结构文章结果1. ImageNet 分类2. 物体检测和实例分割3. 语义分割方法1. MPViT architecture2. MS-Patch Embed Block3. MP-Transformer Block ![在…

【超级超级无敌好用的三个实用网站,用完就走,尽显渣男本色】

今天我来给大家分享超级超级无敌好用的三个实用网站&#xff0c;用完就走&#xff0c;尽显渣男本色&#xff0c;如果你觉得有帮助&#xff0c;点了赞吧&#xff0c;创作不易&#xff0c;关注再走&#xff0c;后续更精彩。 一. tinywow 首先我们推荐的是国外一款在线实用网站工…

面试题CSS篇(一)

目录 一、flex布局 1、基本概念 2、容器属性 &#xff08;1&#xff09;flex-direction 决定主轴的方向&#xff08;即项目的排列方向&#xff09; &#xff08;2&#xff09; flex-wrap &#xff08;3&#xff09;flex-flow &#xff08;4&#xff09;justify-content…

【ECNU】3633. 双人旋转赛车(C++)

目录 题目 输入格式 输出格式 样例 提示 思路 代码 题目 单点时限: 2.0 sec 内存限制: 1024 MB oxx 和 Xiejiadong 在玩一个双人旋转赛车的小游戏。 他们将进行一些比赛。每局比赛必须按顺序进行&#xff0c;胜者会得到该局对应的分数 xi。 由于 oxx 技艺不精&#…

PMP®考试抽中审查提供的材料

PMP审查流程&#xff1a;属于第一类的申请者&#xff08;学士学位或同等学位及以上&#xff09;1&#xff0e; 核实学士学位或同等学位2&#xff0e; 核实项目管理经验3&#xff0e; 核实35小时的项目管理教育属于第二类的申请者&#xff08;高中、大专或同等学历&#xff09;1…

解决httprunner3.x上$符号无法当成普通符号用的方法

前言 由于要测试的api中会涉及$符号的传递, 要求其放在参数中当一个普通符号使用, 但由于httprunner框架处理逻辑, 会将如$coe当成一个变量, 从而报错找不到该变量的值 现象 接口某参数为: coeConfig$coal$08d99cca03a84d1d9e9a49b4534bb598运行时框架会抛出异常: 分析 研读框…