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之切片的更多相关文章

  1. Golang 入门 : 切片(slice)

    切片(slice)是 Golang 中一种比较特殊的数据结构,这种数据结构更便于使用和管理数据集合.切片是围绕动态数组的概念构建的,可以按需自动增长和缩小.切片的动态增长是通过内置函数 append( ...

  2. golang slice切片的原理以及内置函数cap, len

    golang中slice(切片)是常用的类型, slice是对数组进行封装 package main import ( "fmt" "strconv") fun ...

  3. golang slice 切片原理

    golang 中的 slice 非常强大,让数组操作非常方便高效.在开发中不定长度表示的数组全部都是 slice .但是很多同学对 slice 的模糊认识,造成认为golang中的数组是引用类型,结果 ...

  4. 转 Golang 入门 : 切片(slice)

    https://www.jianshu.com/p/354fce23b4f0 切片(slice)是 Golang 中一种比较特殊的数据结构,这种数据结构更便于使用和管理数据集合.切片是围绕动态数组的概 ...

  5. 菜鸟系列Golang学习 — 切片

    切片简介 切片也是一种数据类型,在Golang中,切片底层基于数组实现的. 我们定义切片如下 var slice []int 切片之所以出现,是为了更好的利用资源,管理数据,如果使用数组,则我们一开始 ...

  6. golang之切片与排序

    1.排序与查找操作 排序操作在sort包中,sort.Ints对整数进行排序,sort.Strings对字符串进行排序,sort.Float64对浮点数进行排序 package main import ...

  7. Golang 数组 切片 字典 基本知识点

    数组 数组的声明 var arrayName [arraySize]dataType eg: var array1 [5]int 在声明数组时,必须指定数组名,数组长度和数组元素的类型. 数组的初始化 ...

  8. GoLang数组切片

    1. 数组1.1 如何定义数组同java数组一样,数组是一组内存连续且类型相同的数据组成 //不初始化初始值默认为0 var arr1 = [5]int{} var arr2 = [5]int{1,2 ...

  9. GoLang基础数据类型-切片(slice)详解

    GoLang基础数据类型-切片(slice)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 数组的长度在定义之后无法再次修改:数组是值类型,每次传递都将产生一份副本.显然这种数 ...

随机推荐

  1. LambdaMART简介——基于Ranklib源码(二 Regression Tree训练)

    上一节中介绍了 $ \lambda $ 的计算,lambdaMART就以计算的每个doc的 $\lambda$ 值作为label,训练Regression Tree,并在最后对叶子节点上的样本 $la ...

  2. 實驗項目wordcount

    wordcount 1.设计思路 第一步 :主函数参数使用命令行参数,定义一个文件指针fp. 第二步:判断能否用只读的形式打开命令行指针中的文件,并让指针指向打开函数,若不能则输出不能读取文件,否则下 ...

  3. I.MX6 Linux 3.0.35 SD boot

    /********************************************************************************* * I.MX6 Linux 3.0 ...

  4. 获取bing带swim的网址列表

    需求背景: 应老婆要求,搜集带有swim关键字的网站.实现过程: 使用requests模块通过bing接口搜索swim关键,将返回内容按需求进行处理,得到网站列表. 注:代码比较拙,老司机就不要弄废时 ...

  5. MySQL This function has none of DETERMINISTIC, NO SQL...错误1418 的原因分析及解决方法

    MySQL开启bin-log后,调用存储过程或者函数以及触发器时,会出现错误号为1418的错误: ERROR 1418 (HY000): This function has none of DETER ...

  6. redis Linux 、Windows ubuntu 下的安装

    Redis 安装 2018-07-05 Window 下安装 下载地址:https://github.com/MSOpenTech/redis/releases. Redis 支持 32 位和 64 ...

  7. Java中return的语句

    1.return语句的作用:a.返回一个值,这个值可以是任意类型.b.使程序返回到操作系统(即终止程序)2.java中对于一个函数,不论有没有返回值类型,都可以带有return 语句.但是区别在于,r ...

  8. 流行的FPGA的上电复位

    在实际设计中,由于外部阻容复位时间短,可能无法使FPGA内部复位到理想的状态,所以今天介绍一下网上流行的复位逻辑. 在基于verilog的FPGA设计中,我们常常可以看到以下形式的进程: 信号rst_ ...

  9. 【POJ】1062 昂贵的聘礼 (最短路)

    题目 传送门:QWQ 分析 最短路显然,但不好搞地位等级..... 地位等级不好搞?那么就暴力.. 枚举我们允许的地位等级,跑最短路. 所以$ n^2logn $出100什么鬼啊,很有迷惑性啊 还有4 ...

  10. 让IE依据HTML头标签选择显示模式

    文件兼容性用于定义让IE如何编译你的网页.此文件解释文件兼容性,如何指定你网站的文件兼容性模式以及如何判断一个网页该使用的文件模式. 前言 为了帮助确保你的网页在所有未来的IE版本都有一致的外观,IE ...