go笔记——切片与数组

1.切片与数组

1.1. 切片其底层的实现就是数组。相当于是对数组进一步封装的数据结构,他有相关的方法操作数组和切片
切片并不存储任何数据,它只是描述了底层数组中的一段。更改切片的元素会修改其底层数组中对应的元素。与它共享底层数组的切片都会观测到这些修改。

package main

import "fmt"

func main() {
	names := [4]string{
		"John",
		"Paul",
		"George",
		"Ringo",
	}
	fmt.Println(names)
	//output:[John Paul George Ringo]
	
	a := names[0:2]
	b := names[1:3]
	fmt.Println(a, b)
	//output:[John Paul] [Paul George]
	
	b[0] = "XXX"
	fmt.Println(a, b)
	//output:[John XXX] [XXX George] 共享同一个names数组,所以会造成a切片也发生了变化

}

1.2. 切片和数组的语法命名上的差别

a := [2]int{0,1}  //数组,初始化时就指定了大小
b := []int{} //切片,初始化时不指定大小
b = append(b,0) //通过append方式添加数据,其底层会动态分配空间,并返回一个新的数组空间(变大了),所以必须重新通过一个变量名来接收

1.3. 对切片的操作
在go中,切片是一种派生类型,但是他并没有实现自己的方法,既无法通过方法操纵切片,而是只能通过内建函数操作切片。(函数是类型外的定义,方法是绑定了具体类型的方法)。比如append、copy、len、cap等等。

发布了69 篇原创文章 · 获赞 10 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/JustKian/article/details/100667087