- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Go语言--切片(Slice)详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
说明:
Go 语言切片是对数组的抽象.
Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大.
注意:切片不需要说明长度 。
1
2
3
|
var identifier []
type
//
例如
var slice []int
|
1
2
3
4
5
|
var slice1 []
type
=
make
([]
type
, len)
//
也可以简写为
slice1 :=
make
([]
type
, len)
//
例如
slice :=
make
([]
type
, len)
|
可以由 len() 方法获取长度.
切片提供了计算容量的方法 cap() 可以测量切片最长可以达到多少 。
1
2
3
4
5
6
7
8
9
10
|
package main
import
"fmt"
func main(){
var number =
make
([]int,3,5)
fmt
.Printf(
"len=%d cap=%d slice=%v\n"
,len(number),cap(number),number)
}
//len
=3 cap=5 slice=[0 0 0]
|
2、空(nil)切片 。
一个切片在未初始化之前默认为 nil,长度为 0 。
1
2
3
4
5
6
7
8
9
10
|
package main
import
"fmt"
func main(){
var number []int
fmt
.Printf(
"len=%d cap=%d slice=%v\n"
,len(number),cap(number),number)
}
//len
=0 cap=0 slice=[]
|
可以通过设置下限及上限来设置截取切片 [lower-bound:upper-bound] 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
package main
import
"fmt"
func main() {
//
创建切片
number := []int{0, 1, 2, 3, 4, 5, 6, 7, 8}
printSlice(number)
//
打印原始切片
fmt
.Println(
"number == "
, number)
//
打印子切片从索引1到索引4
fmt
.Println(
"number == "
, number[1:4])
//
打印子切片默认下限
fmt
.Println(
"number == "
, number[:3])
//
打印子切片默认上限
fmt
.Println(
"number == "
, number[4:])
}
func printSlice(x []int) {
fmt
.Printf(
"len=%d cap=%d slice=%v\n"
, len(x), cap(x), x)
}
|
结果:
原理:创建一个新的更大的切片并把原分片的内容都拷贝过来 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
append() 和 copy() 函数
package main
import
(
"fmt"
)
func main() {
//
创建切片
var number []int
printSlice(number)
//
允许追加空切片
number = append(number,0)
printSlice(number)
//
向切片添加一个元素
number = append(number,1)
printSlice(number)
//
同时添加多个元素
number = append(number,2,3,4)
printSlice(number)
//
创建的新的切片是之前的切片容量的两倍
number1 :=
make
([]int,len(number),(cap(number))*2)
//
拷贝number的内容到number1中
copy(number1,number)
printSlice(number1)
}
func printSlice(x []int) {
fmt
.Printf(
"len=%d cap=%d slice=%v\n"
, len(x), cap(x), x)
}
|
到此这篇关于Go语言--切片(Slice)详解的文章就介绍到这了,更多相关Go语言切片(Slice)内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。
原文链接:https://zhuanlan.zhihu.com/p/137152510 。
最后此篇关于Go语言--切片(Slice)详解的文章就讲到这里了,如果你想了解更多关于Go语言--切片(Slice)详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
试图自学,但发现很难找到示例,我的大脑已经陷入了困境。非常不确定 3 和 4,需要帮助才能使 5 正常工作。 package main import "fmt" func main () {
我有一个 slice ,它由字符串类型的 slice 组成。我希望能够为这片 slice 的各个元素赋值,不一定按顺序。然后,稍后,我希望能够更改任何特定元素的值。我已经阅读了有关 slice 的相同
我正在尝试将整数 slice append 到由整数 slice 组成的 slice 。当我打印 slice 时,它按预期显示。但是,当我将 slice append 到一片 slice 时,内容会发
我读了go slice usage and internals和 Slice和 Effective go#slice但是没有像这样用 3 个数字 slice 的方法:slice[a:b:c] 例如这段
这个问题在这里已经有了答案: Are slices passed by value? (5 个答案) 关闭 8 个月前。 如果可能的话,我正在努力使我的代码更具性能以节省内存 我做了一些研究,但找不
我是 Golang 的新手。 当我尝试它时,出现编译错误: cannot use a.B (type []*C) as type []Z in field value 代码: package main
我有数据结构: type PosList []int type InvertedIndex struct { Capacity int Len int IndexList [
我在 Go 中使用矩阵乘法进行一些性能实验并遇到了一些意想不到的结果。 版本 1: func newMatrix(n int) [][]int { m := make([][]int, n)
文档涵盖了 slice() 的 3 种用法对象: obj[:stop] = obj[slice(stop)] obj[start:stop] = obj[slice(start, stop)] obj
我有以下表示网页的结构 type Webpage struct { url.URL references []url.URL } 我想将网站表示为网页的集合。我正在使用这个结构,但感觉
我有一个这样的结构: type Headers struct { header string valueFromCalculation string
我正在参观 Golang 网站,我正在尝试消化其中一个示例。目前还不清楚它是如何工作的: package main import "fmt" func main() { s := []int{
我很好奇解包 slice 并将它们作为参数发送给可变参数函数。 假设我们有一个带有可变参数的函数: func unpack(args ...interface{}) 如果我们不想传入它工作的接口(in
我正在尝试解码来自服务器的 gzip 响应,该响应是一个 msgpack 数组或最终被 gzip 压缩的 msgpack 数组。 为了说明这一点,我的回复看起来像这样: gzip(msgpack([m
我是 Go 编程的新手。我在 Go 编程书籍中读到 slice 由三部分组成:指向数组的指针、长度和容量。 我很困惑: nil slice ( slice 没有可指向的底层数组,len = 0,cap
在Go Programming Language书中,作者给出了append()函数的以下代码示例,该函数接受[]int和int作为参数,并将相应地处理调整大小: // gopl.io/ch4/app
我在代码高尔夫游戏中尝试优化字符串复数时遇到了这个怪癖。我的想法是将字符串写成复数形式,然后使用 substr 有条件地切断最后一个字符: var counter = 1; var myText =
我有一个字符串数组:slice1 [][]string。我使用 for 循环获得了我想要的值: for _, i := range slice1 { //[string1 string2] f
我正在尝试实现一个将 TCP 端口 slice 拆分为 x 个其他 slice 的功能。这些 slice 将发送给将扫描这些端口的工作人员,因此 x 由工作人员的数量设置。 这是代码: // crea
我有以下代码 func Sum(a []int) int { res := 0 for _, n := range a { res += n } ret
我是一名优秀的程序员,十分优秀!