Go语言--切片(Slice)详解
作者:归子莫 发布时间:2024-04-25 15:28:15
标签:Go语言,切片,Slice
说明:
Go 语言切片是对数组的抽象。
Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。
一、定义切片
注意:切片不需要说明长度
1、声明一个未指定大小的数组来定义切片
var identifier []type
//例如
var slice []int
2、使用make()函数来创建切片
var slice1 []type = make([]type, len)
//也可以简写为
slice1 := make([]type, len)
//例如
slice := make([]type, len)
二、切片是可索引的
1、len() 和 cap() 函数
可以由 len()
方法获取长度。
切片提供了计算容量的方法 cap()
可以测量切片最长可以达到多少
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
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]
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)
}
结果:
四、增加切片的容量
原理:创建一个新的更大的切片并把原分片的内容都拷贝过来
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)
}
来源:https://zhuanlan.zhihu.com/p/137152510
0
投稿
猜你喜欢
- 标量标量由普通小写字母表示(例如,x、y和z)。我们用 R \mathbb{R} R表示所有(连续)实数标量的空间。标量由只有一个元素的张量
- 使用正则库爬取淘宝商品的商品信息,首先我们需要确定想要爬取的对象我们在淘宝里搜索“python”,出来的结果从url连接中可以得到搜索商品的
- 目录代码分享一、安装并创建Scrapy项目二、爬取应用市场评论过程1. Scrapy爬虫运行流程2. 页面分析页面分析过程一页面分析过程二页
- openpyxl 的用法实例1.1 Openpyxl 库的安装使用openpyxl 模块是一个读写 Excel 2010 文档的 Pytho
- 由于一些读者对于960 Grid System CSS Framework的原理和使用方法比较感兴趣,暴风彬彬今天将和大家一同分享这篇关于9
- Ubuntu Server 16.04下mysql8.0安装配置图文教程1.从Mysql官网上下载安装文件。有两种方式可供选择:使用APT安
- 1 如何创建项目数据库首先,在虚拟机数据库中建立一个与项目同名的数据库,方便管理。(django_test) bd@DF:~$ mysql
- 我的页面上有一个下拉菜单,页面上有一个文本输入框,一个图像上传框,文本输入框默认是显示的,而图片上传框是隐藏的.假设下拉菜单有两项A和B,我
- 路由关系映射的一个小问题URL中那个上尖号在正则中表示 以某某开头 $符号表示以某某结尾 这就限制了开头和结尾,也就固定了长度但是 admi
- 建表,主键自增create table aaa(id bigint identity(1,1) not null PRIMARY key,n
- *args 和 **kwargs首先,要知道的是并不是必须写成*args和**kwargs。 只有变量前⾯的*才是必须的。所以,你也可以写成
- 一、算法概述AdaBoost 是英文 Adaptive Boosting(自适应增强)的缩写,由 Yoav Freund 和Robert S
- if exists (select * from dbo.sysobjects where id = object_id(N'[db
- 功能所在位置该功能运用了django.contrib.messages这个库,再django项目中srtting.py文件中的38行,APP
- asp.net压缩文件夹调用示例:rar("e:/www.aspxhome/", "e:/www.aspxho
- MySql5.0以后均支持存储过程,最近有空,研究了一把这个。格式:以下为引用的内容:CREATE PROCEDURE
- python时间处理月份加减第三方模块 :python-dateutil安装方式:pip install python-dateutil实例
- 前不久,ColourLovers.com公布了一项调查结果。他们发现,美国前100大网站的Logo,主要使用12种颜色。其中,采用蓝色的网站
- 首先声明,这里的权值共享指的不是CNN原理中的共享权值,而是如何在构建类似于Siamese Network这样的多分支网络,且分支结构相同时
- 通常我们做网站,设计版面布局是第一步,如何做到版面布局具有创意又美观大方呢?这就需要一定的版面处理功底。让我们先来了解一下版面布局的步骤:一