go_切片
go语言中切片相当于array的一个view。
其底层实现如下
ptr指的是slice中打头的元素。
len表示slice的长度。
cap表示ptr到整个array的长度 slice可以向后扩展,但不能超过对应数组的长度,但是不能向前扩展
package main import "fmt" //[]int不加长度表示slice
func updateSlice(s []int) {
s[0] = 100
}
func main() {
arr := [...]int{0, 1, 2, 3, 4, 5, 6, 7}
s1 := arr[2:6] //左闭右开,arr[:]这种结构表示切片
s2 := arr[:6]
s3 := arr[2:]
s4 := arr[:]
fmt.Println(s1, s2, s3, s4) updateSlice(s3)
fmt.Println(s3) updateSlice(s4)
fmt.Println(s4) fmt.Println(arr) fmt.Println("reslice") //slice上还可以继续建立slice
fmt.Println(s3)
s3 = s3[:3]
fmt.Println(s3)
s3 = s3[2:]
fmt.Println(s3) fmt.Println("Extending slice")
arr[0], arr[2] = 0, 2
s11 := arr[2:6]
s12 := s11[3:5]
fmt.Printf("s11=%v,len(s11)=%d,cap(s11)=%d\n", s11, len(s11), cap(s11))
fmt.Printf("s12=%v,len(s12)=%d,cap(s12)=%d\n", s12, len(s12), cap(s12))
fmt.Println(" ")
s13 := append(s12, 10)
s14 := append(s13, 11)
s15 := append(s14, 12)
fmt.Println("s13,s14,s15", s13, s14, s15)
fmt.Println("arr=", arr)
//往一个数组中添加数据,可以先把数组变成arr[:]切片,然后再用append()函数往尾部添加值
}
slice的操作
package main
import "fmt"
func printSlice(s []int){
fmt.Printf("%v,len=%d,cap=%d\n",s,len(s),cap(s))//每当装不下的时候就乘2扩充cap
}
func main() {
fmt.Println("创建slice")
var s []int//Zero value for slice is nil
for i:=0;i<100;i++{
printSlice(s)
s = append(s , 2 * i + 1)
}
fmt.Println(s)
//其他创建slice的方法
s1 :=[]int{2,4,6,8}//给slice初始一些值
printSlice(s1)
s2 :=make([]int ,16)//创建一个len为16的slice
s3 :=make([]int ,16,32)//创建一个len为16,cap为32的slice
printSlice(s2)
printSlice(s3)
fmt.Println("复制切片")
copy(s2,s1)
printSlice(s2)
fmt.Println("删除切片中的元素")
s2=append(s2[:3],s2[4:]...)
printSlice(s2)
fmt.Println("拿到头")
front:=s2[0]
s2 =s2[1:]
fmt.Println(front)
printSlice(s2)
fmt.Println("拿到尾")
tail:=s2[len(s2)-1]
s2 =s2[:len(s2)-1]
fmt.Println(tail)
printSlice(s2)
}
go_切片的更多相关文章
- 【Go入门教程2】内置基础类型(Boolean、数值、字符串、错误类型),分组,iota枚举,array(数值),slice(切片),map(字典),make/new操作,零值
这小节我们将要介绍如何定义变量.常量.Go内置类型以及Go程序设计中的一些技巧. 定义变量 Go语言里面定义变量有多种方式. 使用var关键字是Go最基本的定义变量方式,与C语言不同的是Go把变量类型 ...
- 【Go入门教程4】变量(var),常量(const),内置基础类型(Boolean、数值 byte,int,rune、字符串、错误类型),分组,iota枚举,array(数值),slice(切片),map(字典),make/new操作,零值
这小节我们将要介绍如何定义变量.常量.Go 内置类型以及 Go 程序设计中的一些技巧. 定义变量 Go 语言里面定义变量有多种方式. 使用 var 关键字是 Go 最基本的定义变量方式,与 C 语言不 ...
- ArcGIS 10.0紧凑型切片读写方法
首先介绍一下ArcGIS10.0的缓存机制: 切片方案 切片方案包括缓存的比例级别.切片尺寸和切片原点.这些属性定义缓存边界的存在位置,在某些客户端中叠加缓存时匹配这些属性十分重要.图像格式和抗锯齿等 ...
- 利用Python进行数据分析(5) NumPy基础: ndarray索引和切片
概念理解 索引即通过一个无符号整数值获取数组里的值. 切片即对数组里某个片段的描述. 一维数组 一维数组的索引 一维数组的索引和Python列表的功能类似: 一维数组的切片 一维数组的切片语法格式为a ...
- 充电时间 Go中的数组、切片、map简单示例
数组是固定长度的,依稀让我想起了VB:切片是动态的:map一般是键值对 package main import ( "fmt" ) func main() { var userna ...
- GO语言总结(3)——数组和切片
上篇博文简单介绍了一下Go语言的基本类型——GO语言总结(2)——基本类型,本篇博文开始介绍Go语言的数组和切片. 一.数组 与其他大多数语言类似,Go语言的数组也是一个元素类型相同的定长的序列. ( ...
- [LeetCode] Arithmetic Slices 算数切片
A sequence of number is called arithmetic if it consists of at least three elements and if the diffe ...
- 网络切片在5G中的应用
SDNLAB君 • 16-11-25 •1509 人围观 5G和网络切片 当5G被广泛提及的时候,网络切片是其中讨论最多的技术.像KT.SK Telecom.China Mobile.DT.KDDI. ...
- KRPano资源分析工具使用说明(KRPano XML/JS解密 切片图批量下载 球面图还原 加密混淆JS还原美化)
软件交流群:571171251(软件免费版本在群内提供) krpano技术交流群:551278936(软件免费版本在群内提供) 最新博客地址:blog.turenlong.com 限时下载地址:htt ...
随机推荐
- 解决js代码中加入alert()就成功执行,不加就不对的问题!
问题: jquery中的$(document).ready(function(){})中调用两个方法(1)利用ajax请求去后台查图书类别的方法(2)当页面上利用图书类别去查询图书返回页面,让图书类别 ...
- coredns 编译模式添加插件
备注: coredns 默认已经安装了一些插件,比如大家用的多的kubernetes etcd ... 但是我们可以自己编译插件,构建我们自己的 coredns 版本,方便集成使用 1. 项目结 ...
- PHP设置脚本最大执行时间的三种方法
php.ini 中缺省的最长执行时间是 30 秒,这是由 php.ini 中的 max_execution_time 变量指定,如果脚本需要跑很长时间,例如要大量发送电子邮件,或者分析统计大量数据,服 ...
- bzoj 3158 千钧一发——网络流
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3158 发现偶数之间一定满足第二个条件:奇数之间一定满足第一个条件 ( \( (2m+1)^{ ...
- pat1022__字符串查找
主要是对字符串的查找,为了方便并且快速的实现查找,用map会比较方便 同时如何把一个带有空格的字符串变成多个单词也有一个小技巧 char *point=book[i].keyWord;//关键词分离 ...
- ssi框架学习总结
框架简介: 相信大家对于mvc的三层架构已经灰常熟悉了,在这就不细讲了,个人感觉ssi的框架结构还是比较典型的mvc三层架构,还是比较容易上手的.关于这块的入门我想特别感谢下FrankHui童鞋,在他 ...
- 如何配置Python环境
(1) 下载:请在Python官网下载页面(https://www.python.org/downloads/)选择合适的版本(建议选择3.5.2版)的链接,在该版本的下载页面选择合适的安装文件:64 ...
- nginx限制请求之二:(ngx_http_limit_req_module)模块
相关文章: <高可用服务设计之二:Rate limiting 限流与降级> <nginx限制请求之一:(ngx_http_limit_conn_module)模块> <n ...
- python学习(二十) Python 中的比较:is 与 ==
Python 中的比较:is 与 == 在 Python 中会用到对象之间比较,可以用 ==,也可以用 is .但是它们的区别是什么呢? is 比较的是两个实例对象是不是完全相同,它们是不是同一个对象 ...
- springMVC 踩过的坑 - 记录
1. 后台持久层Spring Jpa(即hibernate), 前台angularJS(angularJS只接受json串), 在后台使用DTO层对象代替domain(entity)与前台交互时, 传 ...
