- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章golang常用手册之切片(Slice)原理由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
切片,这是一个在go语言中引入的新的理念。它有一些特征如下:
我们先把上面的理念整理在这里,但是实际的还是要撸码来解决问题.
定义或申明切片 。
首先我们看看申明切片:
1
|
var sliceName []type
|
定义完成后,我们需要定义切片:
1
|
sliceName = make([]type, len)
|
也可以适当简写:
1
|
sliceName := make([]type, len)
|
在上面的例子中,我们申明了一个切片,我们现在先运行看看结果.
1
2
3
4
5
6
7
8
9
10
11
|
package main
import "fmt"
func main() {
sliceName := make([]string, 3)
fmt.Printf("切片slice_name的长度:len=%d \n", len(sliceName))
}
//运行结果如下:
/*
* 切片slice_name的长度:len=3
*/
|
那么看到这里小伙伴们是不是发现切片,也就是我们普通的一个数组,那么它凭什么叫做切片呢?
我么可以看到另外一个make函数: make([]T, length, capacity) 。
在上面的capacity是数组的容量,length则是数组的长度。当新插入元素后长度超过容量,则会自动增加一个容量来填装数据,但是 切片的空间大小是 capacity的整数倍 。demo如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
package main
import "fmt"
func main() {
sliceName := make([]string, 3, 15)
fmt.Printf("切片slice_name的长度:len=%d cap=%d \n", len(sliceName), cap(sliceName))
sliceName[0] = "程先生"
fmt.Println(sliceName)
//运行结果如下:
/*
* 切片slice_name的长度:len=3 cap=15
* [程先生 ]
*/
}
|
初始化切片 。
任何变量或常量在使用之前都需要初始化,不过常量是直接把申明和初始化写在一起的。我们来看看切片的初始化:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
//初始化数组
arr := [] int{1, 2, 3}
fmt.Println(arr)
//初始化切片 sliceName 是 数组arr 的引用
sliceName := arr[:]
fmt.Println(sliceName)
//当然切片引用数组的标准写法是: s := arr[startIndex:endIndex]
//其中startIndex和endIndex都可以省略。
//省缺startIndex则是数组下标为0,endIndex省略则是下标为 len-1
//运行结果如下:
//[1 2 3]
//[1 2 3]
sliceName1 := arr[1:3]
fmt.Println(sliceName1)
//截取切片元素下标从 1开始到3但是并不包括3 并复制给切片sliceName1
//运行结果:[2 3]
|
当然切片也会存在空对象nil的情况,在你申明后不初始化的情况下则会产生nil.
切片的增删改查 。
当我们创建了一个切片后,我们需要对切片的元素进行增加该怎么办呢? 我们可以看到内置append函数: func append(slice []Type, elems ...Type) []Type,代码如下:
1
2
3
4
5
6
|
//首先我们需要先把原来的切片和欲添加元素作为参数加入到append函数中,
//并且append会返回一个新的切片,所以代码如下:
sliceName = append(sliceName, 4)
fmt.Println(sliceName)
//运行结果如下:
// [1 2 3 4]
|
当然我们顺带看下 copy函数如下:
1
2
3
4
5
|
// The copy built-in function copies elements from a source slice into a destination slice.
// Copy returns the number of elements copied, which will be the minimum of len(src) and len(dst).
func copy(dst, src []Type) int
// 上面的说明中指出 我们目标切片接受源数组,并且返回被拷贝的元素个数。
|
当然,go语言并没有提供内置的remove函数,但是我们可以通过append函数实现,如下:
1
2
3
|
/
/
移除某个position的元素
/
/
主要思路就是把该位置之前的数据和后面的数据组合到一起并赋值给原先的数组
sliceName
=
append(sliceName[:position],sliceName[position
+
1
:]...)
|
总结 。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:https://juejin.im/post/5a42029e518825698e7251df 。
最后此篇关于golang常用手册之切片(Slice)原理的文章就讲到这里了,如果你想了解更多关于golang常用手册之切片(Slice)原理的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
本文主要给大家介绍Mysql数据库分库和分表方式(常用),涉及到mysql数据库相关知识,对mysql数据库分库分表相关知识感兴趣的朋友一起学习吧 1 分库 1.1 按照功能分库 按照功能进行
在当前对象由其他包含对象操作的系统中,当传递对当前对象的引用时,链接似乎一直在继续......没有任何结束(对于下面的代码,Car ->myCurrentComponent->myCar_Brake-
我有一个密码 UIAlertView,我们要求用户提供。我需要根据情况在不同的 View 上询问它,从 downloadViewController (用户下载数据后),当他们切换到他们的数据时(如果
我正在尝试编写一个函数,使得对于任何整数 x 的 P(x) 都有一个包含三个元素的列表,即平方、立方和 n 的四次方,但我仍然不知道如何组合然后制作一个函数,例如我有平方、立方体和 4 次幂函数下面是
关闭。这个问题需要更多 focused .它目前不接受答案。 关闭4年前。 锁定。这个问题及其答案是locked因为这个问题是题外话,但具有历史意义。它目前不接受新的答案或交互。 我能否列出一份常见的
Python 常用 PEP8 编码规范 代码布局 缩进 每级缩进用4个空格。 括号中使用垂直隐式缩进或使用悬挂缩进。 EXAMPLE: ?
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 去年关闭。 Improve this questio
在经典 ui 中,您可以使用 xtype:cqinclude 包含来自不同路径的 rtePlugins,基本上为标准 RTE 插件创建一个位置,我如何在 Touch UI 中执行相同操作? 我尝试使用
在经典 ui 中,您可以使用 xtype:cqinclude 包含来自不同路径的 rtePlugins,基本上为标准 RTE 插件创建一个位置,我如何在 Touch UI 中执行相同操作? 我尝试使用
*strong text*我有多个网络应用程序使用了一些常见的依赖项,比如蒙戈连接器谷歌 Guava 乔达时间 我想到将它们从 webapp/WEB-INF/lib 中取出并放入一些 common-l
我正在编写一个 Web 服务器,我想知道哪些 HTTP 请求 header (由客户端发送)是最常见的,因此我应该重点实现。 目前,我只支持Accept 和Host。 最佳答案 不确定您的范围,但由于
我是一名优秀的程序员,十分优秀!