目录:

  • 切片定义
  • 切片基本操作
  • 切片传参
  • make和new的区别

切片定义

1. 切片是基于数组类型做的一层封装。它非常灵活,可以自动扩容。

var a []int
//定义一个int类型的空切⽚

  

2. 切片初始化, a[start:end]创建一个包括从start到end-1的切片。

package main
import (
"fmt"
)
func main() {
a := [5]int{76, 77, 78, 79, 80}
var b []int = a[1:4] //基于数组a创建一个切片,包括元素a[1] a[2] a[3]
fmt.Println(b)
}

  

3. 切片初始化方法2。

package main
import (
"fmt"
)
func main() {
c := []int{6, 7, 8} //创建⼀一个数组并返回⼀一个切⽚片
fmt.Println(c)
}

  

切片基本操作

1. 数组切片的基本操作
a) arr[start:end]:包括start到end-1(包括end-1)之间的所有元素
b) arr[start:]:包括start到arr最后⼀一个元素(包括最后一个元素)之间的所有元素
c) arr[:end]:包括0到end-1(包括end-1)之间的所有元素
d) arr[:]:包括整个数组的所有元素

package main
import (
"fmt"
)
func main() {
//创建一个数组,其中[…]是编译器器确定数组的长度,darr的长度是9
darr := [...]int{57, 89, 90, 82, 100, 78, 67, 69, 59}
//基于darr创建一个切片dslice,包括darr[2],darr[3],darr[4]三个元素
dslice := darr[2:5]
fmt.Println("array before",darr)
for i := range dslice {
//对于dslice中每个元素进行+1,其实修改是darr[2],darr[3],darr[4]
dslice[i]++
}
fmt.Println("array after",darr)
}

  

2、切片修改

package main
import (
"fmt"
)
func main() {
numa := [3]int{78, 79 ,80}
//创建⼀一个切⽚片,包含整个数组的所有元素
nums1 := numa[:]
nums2 := numa[:]
fmt.Println("array before change 1",numa)
nums1[0] = 100
fmt.Println("array after modification to slice nums1", numa)
nums2[1] = 101
fmt.Println("array after modification to slice nums2", numa)
}

  

3、使用make创建切片

package main
import (
"fmt"
)
func main() {
//[]中没有⻓长度
i := make([]int, 5, 5)
fmt.Println(i)
}

  

4、切片的长度和容量

package main
import (
"fmt"
)
func main() {
fruitarray := […]string{
"apple", "orange", "grape",
"mango", "water melon",
"pine apple", "chikoo"
}
fruitslice := fruitarray[1:3]
//⻓长度是2,容量量is 6
fmt.Printf("length of slice %d capacity %d",
len(fruitslice), cap(fruitslice))
}

  

5、切片的再切片

package main
import (
"fmt"
)
func main() {
fruitarray := […]string{
"apple", "orange", "grape", "mango",
"water melon", "pine apple", "chikoo"
}
fruitslice := fruitarray[1:3]
//⻓长度是2, 容量量是6
fmt.Printf("length of slice %d capacity %d\n",
len(fruitslice), cap(fruitslice))
//再重新进⾏行行切⽚片,不不能⼤大于数组fruitarray的⻓长度,否则越界
fruitslice = fruitslice[:cap(fruitslice)]
fmt.Println("After re-slicing length is”,
  len(fruitslice), "and capacity is",cap(fruitslice))
}

  

6、空切片

package main
import (
"fmt"
)
func main() {
//定义names是⼀一个空切⽚片,⻓长度和容量量都等于0
//不不能对空切⽚片进⾏行行访问,否则panic
var names []string
if names == nil {
fmt.Println("slice is nil going to append")
names = append(names, "John", "Sebastian", "Vinay")
fmt.Println("names contents:",names)
}
}

  

7、append一个切片

package main
import (
"fmt"
)
func main() {
veggies := []string{"potatoes","tomatoes","brinjal"}
fruits := []string{“oranges","apples"}
//fruits后⾯面的3个点表示展开fruits切⽚片成⼀一个个元素
food := append(veggies, fruits...)
fmt.Println("food:",food)
}

  

切片传参

1、切片传参

package main
import (
"fmt"
)
//在函数内部修改numbers切⽚片的值
func subtactOne(numbers []int) {
for i := range numbers {
numbers[i] -= 2
}
}
func main() {
nos := []int{8, 7, 6}
fmt.Println("slice before function call", nos)
subtactOne(nos)
//nos修改生效了了,说明切片是引⽤用类型
fmt.Println("slice after function call", nos)
}

  

2、切片拷贝

package main
import (
"fmt"
)
func main() {
veggies := []string{"potatoes","tomatoes","brinjal"}
fruits := []string{“oranges","apples"}
copy(veggies, fruits)
fmt.Println(veggies, fruits)
}

 

3、切片遍历

var a [3]int
a[0] = 10
a[1] = 20
a[2] = 30
B := a[:]
for index, val := range b {
}
//和数组遍历是⼀一样的

  

make和new的区别

1、 make为内建类型slice、map和channel分配内存。

//初始化一个切⽚片
s := make([]int, 10, 30)

  

2、new⽤用于各种类型的内存分配,new返回是一个指针。

【原创】go语言学习(八)切片的更多相关文章

  1. go语言学习-数组-切片-map

    数组 go语言中数组的特点: 数组的长度是固定的,并且长度也是数组类型的一部分 是值类型,在赋值或者作为参数传递时,会复制整个数组,而不是指针 定义数组的语法: var arr1 = [5]int{1 ...

  2. Dart语言学习(八) dynamic

    dynamic 表示是动态的,数据类型是指任意类型 var a; a = ; a = "Dart"; print(a); dynamic b = ; b = "JavaS ...

  3. C语言学习 第八次作业总结

    本次作业其实没有新的内容,主要就是复习上一次的一维数组的相关内容.冯老师布置了5道题目,其中涉及到一些比较简单的排序或者是查找的方法.因为数据很少,所以直接使用for循环遍历就可以了. 关于本次作业, ...

  4. Go语言学习笔记十一: 切片(slice)

    Go语言学习笔记十一: 切片(slice) 切片这个概念我是从python语言中学到的,当时感觉这个东西真的比较好用.不像java语言写起来就比较繁琐.不过我觉得未来java语法也会支持的. 定义切片 ...

  5. Go语言学习笔记八: 数组

    Go语言学习笔记八: 数组 数组地球人都知道.所以只说说Go语言的特殊(奇葩)写法. 我一直在想一个人参与了两种语言的设计,但是最后两种语言的语法差异这么大.这是自己否定自己么,为什么不与之前统一一下 ...

  6. 学习Golang语言(6):类型--切片

    学习Golang语言(1): Hello World 学习Golang语言(2): 变量 学习Golang语言(3):类型--布尔型和数值类型 学习Golang语言(4):类型--字符串 学习Gola ...

  7. go语言学习之路三:切片

    前面讲了变量的有关知识,这里对于其他的数据类型就不多作介绍,(和C差不多),因此重点来讨论下切片. 一.切片是引用类型,这里要稍微介绍两个概念:值类型,构造类型和引用类型 1.值类型:是一种由类型的实 ...

  8. GO学习-(9) Go语言基础之切片

    Go语言基础之切片 本文主要介绍Go语言中切片(slice)及它的基本使用. 引子 因为数组的长度是固定的并且数组长度属于类型的一部分,所以数组有很多的局限性. 例如: func arraySum(x ...

  9. go语言学习笔记

    Go语言学习基本类型Bool 取值范围:true,false (不可以用数字代替)Int/uint 根据平台可能为32或64位int8/uint8 长度:1字节 取值范围-128~127/0~255b ...

  10. 大一上学期C语言学习心得总结

    经过一个学期的C语言学习,大体算是在这个编程语言上入了门,能够通过一些代码解决特定的问题.当然,每次成功将问题转换成代码都小有激动,虽然只是在黑框上输出了一些数字或是字符串. 编程,虽然还不是很懂,但 ...

随机推荐

  1. 匹配script标签及内容js代码的正则表达式

    <script>[\s\S]+?</script>

  2. Codeforces Round #415 (Div. 1) (CDE)

    1. CF 809C Find a car 大意: 给定一个$1e9\times 1e9$的矩阵$a$, $a_{i,j}$为它正上方和正左方未出现过的最小数, 每个询问求一个矩形内的和. 可以发现$ ...

  3. 全栈项目|小书架|服务器开发-NodeJS 项目分包

    唠嗑 参考的是慕课网七月老师的课程,七月的课质量真的挺高的,推荐一波.这次的小书架项目源码不会全部公开,因为用了七月老师课程的绝大部分代码.虽然代码不全,但是只要思路看得懂,代码实现就很简单了. 小书 ...

  4. ajax提交异常解决

    一.遇到的问题 在项目中使用ajax提交表单失败,并且后台程序都没有执行,分析具体问题是由于post表单时contenttype的类型不一致. 二.解决方式 $.ajax({ type: 'post' ...

  5. Centos6 Connect WiFi

    Centos6 Connect WiFi // 安装 wireless tools yum install wireless-tools dkms pciutils lsusb // 使用wlan命令 ...

  6. 【转载】C#通过StartWith和EndWith方法判断字符串是否以特定字符开始或者结束

    C#开发过程中针对字符串String类型的操作是常见操作,有时候业务需要判断某个字符串是否以特定字符开头或者特定字符结束,此时就可使用StartsWith方法来判断目标字符串是否以特定字符串开头,通过 ...

  7. javascript/js实现 排序二叉树数据结构 学习随笔

    二叉树是一种数据结构.其特点是: 1.由一系列节点组成,具有层级结构.每个节点的特性包含有节点值.关系指针.节点之间存在对应关系. 2.树中存在一个没有父节点的节点,叫做根节点.树的末尾存在一系列没有 ...

  8. var img = new Image()

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 2019最新Web前端经典面试试题(含答案)

    1,阐述清楚浮动的几种方式(常见问题)(1)父级div定义 height原理:父级div手动定义height,就解决了父级div无法自动获取到高度的问题. 优点:简单.代码少.容易掌握 缺点:只适合高 ...

  10. Python 简单web服务器的实现

    import re import socket def service_cilent(new_socket): request = new_socket.recv(1024).decode(" ...