golang之切片
1.切片:切片是数组的一个引用,因此切片是引用类型
2.切片的长度可以改变,因此,切片是个可变的数组。
3.切片遍历方式和数组一样,可以用len()求长度
4.cap可以求出slice最大的容量,0<=cap(slice) <=len(array),其中array是slice引用的数组
5.切片的定义:var 变量名 [ ]类型,例如:var str []string ,var arr [] int
package main import "fmt" //slice,map,channel都是用make初始化
func testSlice() {
var slice []int
//用数组初始化切片
var arr []int = [...]int{, , , , }
//arr[start:end] 取头不取尾
//arr[:] 复制一份数组
//去掉切片最后一个元素可以写,slice[:len(slice)-1]
//去掉第一个元素就是slice[1:]
slice = arr[:]
fmt.Println(slice)
fmt.Println(len(slice))
fmt.Println(cap(slice))
fmt.Println()
slice = slice[:]
fmt.Println(len(slice))
fmt.Println(cap(slice)) }
func main() {
testSlice()
}
6.切片的内存布局。

7.通过make创建切片
var slice []type=make([]type,len)
slice := make([]type,len)
slice :=make([]type,len,cap)
8.用append内置函数操作切片
append是双倍cap扩容
string底层就是一个byte的数组,也可以进行切片操作
string底层布局

package main
import "fmt"
func testSlice() {
var a []int = [...]int{, , , , }
s := a[:] //切片s是[2,3,4,5]
fmt.Printf("before len[%d],cap[%d]\n", len(s), cap(s))
s[] =
//%p 指针
fmt.Printf("s=%p a[1]=%p\n", s, &a[])
fmt.Println("before a:", a)
s = append(s, )
s = append(s, )
fmt.Printf("after len[%d] cap[%d]\n", len(s), cap(s))
s = append(s, )
s = append(s, )
s = append(s, )
s[] =
fmt.Println("after a:", a)
fmt.Println(s)
fmt.Printf("s=%p a[1]=%p\n", s, &a[])
//append的...用法
//append会扩容切片容量,默认cap的2倍
fmt.Println("-----分隔符-----(append的...用法)")
var a1=[]int{,,}
var b=[]int{,,}
a1=append(a1,b...)
fmt.Println(a1)
//切片拷贝,copy不会扩容
fmt.Println("-----分隔符-----(切片拷贝)")
s1:=[]int{,,,,}
s2:=make([]int,)
copy(s2,s1)//结果[1 2 3 4 5 0 0 0 0 0],以s1开头
fmt.Println(s2)
//string切片,string本身是不可改的
fmt.Println("-----分隔符-----(string切片)")
str:="hello world"
res1:=str[:]
fmt.Println(res1)
res2:=str[:]
fmt.Println(res2)
}
//修改string的方法
//改中文字符一定要用rune,不能用byte
func testModifyString(){
fmt.Println("----分隔符----")
s:="我hello world"
s1:=[]rune(s)
s1[]='你'
s1[]='我'
s1[]='他'
str:=string(s1)
fmt.Println(str)
}
func main() {
testSlice()
testModifyString()
}
golang之切片的更多相关文章
- Golang 入门 : 切片(slice)
切片(slice)是 Golang 中一种比较特殊的数据结构,这种数据结构更便于使用和管理数据集合.切片是围绕动态数组的概念构建的,可以按需自动增长和缩小.切片的动态增长是通过内置函数 append( ...
- golang slice切片的原理以及内置函数cap, len
golang中slice(切片)是常用的类型, slice是对数组进行封装 package main import ( "fmt" "strconv") fun ...
- golang slice 切片原理
golang 中的 slice 非常强大,让数组操作非常方便高效.在开发中不定长度表示的数组全部都是 slice .但是很多同学对 slice 的模糊认识,造成认为golang中的数组是引用类型,结果 ...
- 转 Golang 入门 : 切片(slice)
https://www.jianshu.com/p/354fce23b4f0 切片(slice)是 Golang 中一种比较特殊的数据结构,这种数据结构更便于使用和管理数据集合.切片是围绕动态数组的概 ...
- 菜鸟系列Golang学习 — 切片
切片简介 切片也是一种数据类型,在Golang中,切片底层基于数组实现的. 我们定义切片如下 var slice []int 切片之所以出现,是为了更好的利用资源,管理数据,如果使用数组,则我们一开始 ...
- golang之切片与排序
1.排序与查找操作 排序操作在sort包中,sort.Ints对整数进行排序,sort.Strings对字符串进行排序,sort.Float64对浮点数进行排序 package main import ...
- Golang 数组 切片 字典 基本知识点
数组 数组的声明 var arrayName [arraySize]dataType eg: var array1 [5]int 在声明数组时,必须指定数组名,数组长度和数组元素的类型. 数组的初始化 ...
- GoLang数组切片
1. 数组1.1 如何定义数组同java数组一样,数组是一组内存连续且类型相同的数据组成 //不初始化初始值默认为0 var arr1 = [5]int{} var arr2 = [5]int{1,2 ...
- GoLang基础数据类型-切片(slice)详解
GoLang基础数据类型-切片(slice)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 数组的长度在定义之后无法再次修改:数组是值类型,每次传递都将产生一份副本.显然这种数 ...
随机推荐
- mongodb 修改openfiles方法
# vi /etc/security/limits.conf 在file中加上以下内容:(注意红色的为添加的) #ftp hard nproc 0#@student - maxlogins 4* so ...
- sysstat工具
sysstat工具可以监控系统的IO,CPU,SWAP,LOAD,NETWORK,DISK 安装后,系统会生成定时任务脚本 路径:/etc/cron.d/sysstat 内容: # Run syste ...
- winodws同步时间命令
首先,你应该判断你的两台域控制器,哪一台担任PDC角色(默认的域内权威的时间服务源). 判断方法很简单,单击“开始”,单击“运行”,键入dsa.msc,然后点确定.这时会打开“Active Direc ...
- 什么是HBase(六)性能调优
硬件层面 内存要大,最好是ECC(Error Checking and Correcting),实现内存的动态纠错:CPU要多路(每个路彼此隔离)每个路一个CPU,每个cpu上面一般都是2~12核. ...
- 洛谷2148(SDOI2009) E&D
题目:https://www.luogu.org/problemnew/show/P2148 SG函数+找规律. 普通地用SG函数做. 每两堆是一个独立问题.因为虽然有可能一个人在同一组里连续操作2次 ...
- sysbench 0.5使用手册
注意:本文刚开始只介绍了sysbench 0.5之前的版本,在了解了sysbench 0.5之后进行了补充,大部分测试和参数都是一样的,只是sysbench 0.5 在测试数据库方面更加全面丰富. 关 ...
- C#使用WebService
一.新建webservice 新建项目→asp.net Web服务应用程序 或者在现有项目中 点击右键 新建web服务程序asmx 只要在webservice类里面 的方法 标注为[WebMethod ...
- XSS 与 CSRF 两种跨站攻击
在前几年,大家一般用拼接字符串的方式来构造动态 SQL 语句创建应用,于是 SQL 注入成了很流行的攻击方式, 但是现在参数化查询 已经成了普遍用法,我们已经离 SQL 注入很远了.但是历史同样悠久的 ...
- 转转转!!Spring MVC控制器用@ResponseBody声明返回json数据报406的问题
本打算今天早点下班,结果下午测试调试程序发现一个问题纠结到晚上才解决,现在写一篇博客来总结下. 是这样的,本人在Spring mvc控制层用到了@ResponseBody标注,以便返回的数据为json ...
- /proc目录下文件详解
/proc “文件系统”是一个目录,其中包含的文件层次结构代表了 Linux 内核的当前状态.它允许用户和管理员查看系统的内核视图. /proc 目录中还包含关于系统硬件及任何当前正在运行的程序信息. ...