- 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的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 3年前关闭。 Improve t
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
我可以从哪里下载 cakephp 1.3 的手册.......? 最佳答案 强烈建议不要下载手册,因为它与开发的方式相同,并且可以改进和更改。但是,我承认需要离线副本,您可以在此处找到有关在哪里查看以
我想使用 GKSession 连接两台设备,其中一台作为服务器,另一台作为客户端。使用此配置我无法使用 GKPeerPickerController。 我在连接两个设备时遇到问题: 仅使用蓝牙:不可能
我花了相当多的时间寻找教程并在 Web 服务目录上实现签名和加密。现在我需要扩展该功能以允许每个用户拥有自己的签名和加密 key 。 出于这个原因,我开始四处寻找一些关于如何使用 WSS4J 拦截器的
使用ggplot2我通常使用geom_text和position=jitter之类的东西来注释我的图。 但是 - 对于一个漂亮的情节,我经常发现手动注释是值得的。如下所示: data2 <- stru
谁能推荐一本好的 ANSI SQL 引用手册吗? 我不一定是指教程,而是当您需要基本或更深入的解释或示例时可以查找的适当引用文档。 目前我正在使用W3Schools SQL Tutorial和 SQL
我正在尝试为我的 CS 1 类(class)编写代码。 代码的要点是编写一个代码,您可以在其中从一百美元的钞票中进行任何金额的找零,我需要归还适当的钞票和硬币。 我必须手动编写 JFrame 如果有人
我正在阅读 shellcoder 的手册。我正在跟踪,但由于某种原因无法让我的 shellcode 运行。我已经编译了该程序 gcc -mpreferred-stack-boundary=2 -m32
我的作业(不是家庭作业,只是“如果你能做到就试试”的事情)是使用位操作来加密和解密 .txt 文件。 这是程序。它成功打开文件进行读/写,但将所有 0 和空格放入 output.txt 文件而不是预期
我在谷歌上搜索了很多关于 C 的不必要结果。我希望能在本地获得最好的 C 手册。我发现引用资料很有用 here.我想自己做笔记并删除手册。 Can I manage it somehow like a
我在这个例子中 w.r.t. shellcoder's handbook(second edition),还有一些关于栈的问题 root@bt:~/pentest# gdb -q sc Readin
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
所以我有一份 PDF 手册,我们正在尝试为其创建可打印的 HTML 版本。我遇到了一些障碍,包括: 100% 缩放与缩小以适合(FF/IE 中的默认设置似乎不同) 只打印一页,后面没有空格页脚(或者甚
当我开始使用 PHP(大约 10 年前)时,最吸引我的是 .chm 格式的手册。我过去常常让“索引”选项卡保持打开状态,然后在其中输入我需要的任何内容,它会引导我进入一个漂亮、简洁但详尽的引用页面。
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
我想更好地了解如何使用 LLDB 调试我的 iOS 代码。我经常看到我的同事使用提示进行调试,例如查看变量的值等等。我在哪里可以找到一些关于如何在命令行上使用 LLDB 调试器的文档? 提前致谢。 最
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
Springer 的 Consolidated Ada Reference Manual 2005 Edition (ISO/IEC 8652:2007(E), Ed. 3) 和 Annotated
我遇到过几个关于使用 mysql 连接器/C++ 的文档,其中所有文档都使用不同的函数来完成相同的事情。例如 `sql::mysql::MySQL_Driver *driver; sql::Conne
我是一名优秀的程序员,十分优秀!