go语言之切片即动态数组

本文详细介绍了Go语言中的切片,包括切片的定义、初始化、len()和cap()函数、空切片、切片截取、append()和copy()函数的用法。通过实例展示了切片作为动态数组的特性和操作方式,对比了切片与数组的区别,并解释了切片容量的变化规则。
摘要由CSDN通过智能技术生成

切片和数组的类型有什么不一样,我们可以打印一下,就可以知道两者的区别了,数组是容量的,所以中括号中有容量,切片的动态数组,是没有容量,这是数组和切片最大的区别

	test8_4 := [20] int {0,1,2,3,4,5,6,7,8,9}
	test8_5 := [] int {0,1,2,3,4,5,6,7,8,9}
	fmt.Println(reflect.TypeOf(test8_4),reflect.TypeOf(test8_5))
	//[20]int []int

 

 

1、定义一个切片和切片的常见操作

package main

import "fmt"

//切片

//数组的长度在定义后就不能在变了,go语言提供了一个数组切片slice来弥补数组的不足,他的长度是可以更改的


func main() {
	//申明一个空的切片

	var s1 []int

	s2 := []int{}

	//使用make创建一个切片,当前的长度为0
	var s3 []int = make([]int,0)

	s4 := make([]int,0,0)

	fmt.Println(s1)
	fmt.Println(s2)
	fmt.Println(s3)
	fmt.Println(s4)

	//[]
	//[]
	//[]
	//[]

	arr := [...]int{0,1,2,3,4,5,6,7,8,9}

	fmt.Println("arr[2:6]=",arr[2:6])
	//arr[2:6]= [2 3 4 5]

	fmt.Println("arr[:6]=",arr[:6])
	//arr[:6]= [0 1 2 3 4 5]

	fmt.Println("arr[2:]=",arr[2:])
	//arr[2:]= [2 3 4 5 6 7 8 9]

	fmt.Println("arr[:]=",arr[:])
	//arr[:]= [0 1 2 3 4 5 6 7 8 9]


	//内建函数,append,给切片的尾部增加元素
	var s5 []int

	//追加一个元素
	s5 = append(s5,1)
	fmt.Println(s5)
	//[1]

	//追加2个元素
	s5 = append(s5,2,3)
	fmt.Println(s5)
	//[1 2 3]


	//创建一个指定大小的切片
	s6 := make([]int,5)

	s6 = append(s6,6)
	fmt.Println(s6)
	//[0 0 0 0 0 6]

	//创建一个有值的切片
	s7 := []int{1,2,3,4}

	s7 = append(s7,5)
	fmt.Println(s7)
	//[1 2 3 4 5]

	s7 = append(s7,6,7)
	fmt.Println(s7)
	//[1 2 3 4 5 6 7]
}

  

2、切片操作是引用,修改切片后的数组也会导致原来的切片数据变化,这里和python是不同的

package main

import "fmt"

func main() {
	arr1 := [...]int{0,1,2,3,4,5,6,7,8,9}

	s1 := arr1[2:]
	fmt.Println(s1)
	//[2 3 4 5 6 7 8 9]
	s1[0] = 100
	fmt.Println(s1)
	//[100 3 4 5 6 7 8 9]
	fmt.Println(arr1)
	//[0 1 100 3 4 5 6 7 8 9]



}

  

 3、查看切片的长度和容量,切片出来的数据的容量是从开始的下标开始,到切片的原始数据的结尾做为结束

package main

import "fmt"

func main() {
	arr1 := [...]int{0,1,2,3,4,5,6,7,8,9}

	s1 :=
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值