一、切片创建方式

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. PHP中foreach有关引用的问题

    软件开发的过程中,细节处理非常重要,说得大一点就是细节决定成败,别人不懂的地方,你懂,别人没注意到的细节,你注意到了,这就是你胜出对方的地方,这样就体现出了你的价值. 下面是几个foreach循环中引 ...

  2. bzoj 3676: [Apio2014]回文串【后缀自动机+manacher】

    用manacher找出本质不同的回文子串放在SAM上跑 #include<iostream> #include<cstdio> #include<cstring> ...

  3. spring boot启动报错Error starting ApplicationContext(未能配置数据源)

    主要错误:Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource c ...

  4. win7/8系统中php5.3和5.4、5.5不能加载php_curl.dll解决办法

    win7/8系统中php5.3和5.4.5.5不能加载php_curl.dll解决办法   作者:用户 来源:互联网 时间:2016-06-23 18:54:33 php变量注释系统模块 摘要: 本文 ...

  5. 状压DP+记忆化搜索 UVA 1252 Twenty Questions

    题目传送门 /* 题意:给出一系列的01字符串,问最少要问几个问题(列)能把它们区分出来 状态DP+记忆化搜索:dp[s1][s2]表示问题集合为s1.答案对错集合为s2时,还要问几次才能区分出来 若 ...

  6. 题解报告:hdu1219AC Me

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1219 Problem Description Ignatius is doing his homewo ...

  7. for循环的阶乘

    方法一: long sum=0; long num=1; for (long i = 1; i <=20; i++) { for(long j=i;j>0;j--){ num=num*j; ...

  8. google breakpad 使用初步总结

    项目地址:https://code.google.com/p/google-breakpad/    访问不了请挂VPN 这是一个由google主导的开源项目,官方介绍为:An open-source ...

  9. ASP.NET MVC+Bootstrap个人博客之修复UEditor编辑时Bug(四)

    我的个人博客站在使用百度富文本编辑器UEditor修改文章时,遇到了一些问题,(不知是bug,还是我没有配置好).但总算找到了解决方法,在此记录下来. 遇到的问题: 正常来讲,进入文章修改页,只需将U ...

  10. AJPFX简述java语言现状和发展

    作为一种最流行的网络编程语言之一,java语言在当今信息化社会中发挥了 重要的作用.Java语言具有面向对象.跨平台.安全性.多线程等特点,这使得java成为许多应用系统的理想开发语言.java应用在 ...