一、切片创建方式

func main() {
// 创建切片方式1
// 让切片引用一个数组
array := [...]int{1, 2, 3, 4}
slice1 := array[1:3]
fmt.Println(slice1) // [2 3] // 创建切片方式2
// 通过make方式创建切片
var slice2 []int // 这是切片定义,需要让其引用一个数组,或make一下才能使用!!!
slice2 = make([]int, 4)
fmt.Println(slice2) // [0 0 0 0] var slice3 = make([]int, 4, 8) // 8为容量(cap),可选
fmt.Println(slice3) // [0 0 0 0] slice4 := make([]string, 4)
fmt.Println(slice4) // [ ]
fmt.Println(cap(slice4)) // 4 // 创建切片方式3
// 定义一个切片,直接就指定具体数组,原理类似make方式
var slice5 = []float64{1.11, 2.22, 3.33}
slice6 := []string{"a", "b"}
fmt.Printf("%.1f\n", slice5) // [1.1 2.2 3.3]
fmt.Println(slice6) // [a b]
}

方式1与方式2的区别:

  • 方式1是直接引用数组,这个数组是事先存在的,程序员是可操作的;
  • 方式2是通过make来创建切片,make会创建一个数组,而切片就是引用这个数组,这个数组是由切片在底层进行维护,程序员不可操作。

二、切片的添加操作

func main() {
slice := []string{"a", "b"}
fmt.Println(slice) // [a b]
slice = append(slice, "c", "d")
fmt.Println(slice) // [a b c d]
slice = append(slice, slice...)
fmt.Println(slice) // [a b c d a b c d]
}

三、切片的拷贝操作

# 参数的数据类型都是切片
copy(param1, param2)
func main() {
slice1 := []int{1, 2, 3}
slice2 := make([]int, 5)
slice3 := make([]int, 2)
copy(slice2, slice1)
fmt.Println(slice2) // [1 2 3 0 0]
copy(slice3, slice1)
fmt.Println(slice3) // [1 2]
}

四、string与slice关系

string底层是一个byte数组,因此string也可以进行切片操作(这里不演示)。

string是不可变的,因此不能通过 str[0] = 'xx' 方式来修改字符串;如果需要修改字符串,可以先将 string 转成 []byte 或者 []rune 类型,修改后再转回。

func main() {
str := "Hello"
sli := []byte(str)
sli[0] = 'h'
fmt.Println(sli) // [104 101 108 108 111]
str = string(sli)
fmt.Println(str) // hello // 推荐使用下面方式(支持中文)
s := []rune(str)
s[0] = '吖'
str = string(s)
fmt.Println(str) // 吖ello
}

Go:slice的更多相关文章

  1. JS截取字符串:slice(),substring()和substr()

    var string='abcdefg' 1.slice() string.slice(startLocation [, endLocation]) ps1:2个参数可以为负数,若参数值为负数,则将该 ...

  2. golang:slice切片

    一直对slice切片这个概念理解的不是太透彻,之前学习python的就没搞清楚,不过平时就用python写个工具啥的,也没把这个当回事去花时间解决. 最近使用go开发又遇到这个问题,于是打算彻底把这个 ...

  3. python函数回顾:slice()

    描述 slice() 函数实现切片对象,主要用在切片操作函数里的参数传递. 语法 class slice(stop) class slice(start, stop[, step]) 参数说明: st ...

  4. 对Array.prototype.slice.call()方法的理解在看别人代码时,发现有这么个写法:[].slice.call(arguments, 0),这到底是什么意思呢?

    1.基础 1)slice() 方法可从已有的数组中返回选定的元素. start:必需.规定从何处开始选取.如果是负数,那么它规定从数组尾部开始算起的位置.也就是说,-1 指最后一个元素,-2 指倒数第 ...

  5. python每日一类(4):slice

    class slice(stop)class slice(start, stop[, step]) Return a slice object representing the set of indi ...

  6. JavaScript 数组操作:slice vs splice

    在 JavaScript 中,对于数组的操作有两个很容易混淆的方法 splice, slice ,这里给大家推荐一篇介绍 splice, slice 二者区别的文章. In JavaScript, m ...

  7. Go基础系列:Go slice详解

    slice表示切片(分片),例如对一个数组进行切片,取出数组中的一部分值.在现代编程语言中,slice(切片)几乎成为一种必备特性,它可以从一个数组(列表)中取出任意长度的子数组(列表),为操作数据结 ...

  8. python定制类(1):__getitem__和slice切片

    python定制类(1):__getitem__和slice切片 1.__getitem__的简单用法: 当一个类中定义了__getitem__方法,那么它的实例对象便拥有了通过下标来索引的能力. c ...

  9. Tensorflow学习笔记(1):tf.slice()函数使用

    tensorflow 当中的一个常用函数:Slice() def slice(input_, begin, size, name=None) 函数的功能是根据begin和size指定获取input的部 ...

随机推荐

  1. 利用插件(jQuery-ui.js)实现表格行的拖拽排序

    template 模板(html) 首先要引入jQuery-ui.js的文件.import './../../scripts/base/jquery/jquery-ui.min.js';<tab ...

  2. Spark MLlib机器学习

    前言 Spark MLlib是Spark对常用的机器学习算法的实现库,同时包括相关的测试和数据生成器.

  3. python代码覆盖率coverage简介与用法

    如果衡量单元测试对相应代码的测试重量,覆盖率是一个必要非充分条件,因此统计代码的覆盖率,检视单测是否充分,就尤为的重要.这里针对python-unittest的单测的覆盖率coverage进行使用说明 ...

  4. API+RESTful

    什么是API? API 划分了服务供需方的边界,是协调不同端开发人员的协议/框架.API两端,程序可以用不同的语言.由不同的团队开发,追求不同的目标,有不同的发布节奏.只要在 API 方面达成一致,两 ...

  5. LightOj 1197 Help Hanzo (区间素数筛选)

    题目大意: 给出T个实例,T<=200,给出[a,b]区间,问这个区间里面有多少个素数?(1 ≤ a ≤ b < 231, b - a ≤ 100000) 解题思路: 由于a,b的取值范围 ...

  6. 解题报告:hdu 2073 无限的路

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2073 Problem Description 甜甜从小就喜欢画图画,最近他买了一支智能画笔,由于刚刚接 ...

  7. 修改SolrCloud在ZooKeeper中的配置文件操作记录

    修改SolrCloud在ZooKeeper中的配置文件操作记录. 命令执行目录: /opt/solr-/server/scripts/cloud-scripts/ 1.下载配置文件 ./zkcli., ...

  8. Service官方教程(8)Bound Service示例之2-跨进程使用Messenger

    Compared to AIDL When you need to perform IPC, using a Messenger for your interface is simpler than ...

  9. Windows 7下如何在Cygwin下正确安装Tcpreplay(图文详解)

    可以在大家安装的Cygwin的安装目录下执行(我的这里是D:\SoftWare\cygwin) #winpcap的安装过程:|$ unzip WpdPack_4_1_2.zip|$ cp -r Wpd ...

  10. form表单ajaxSubmit提交并验证

    html: <form class="register-form" action="{:U('')}" method="post"&g ...