Go学习笔记-数组和切片
Go语言介绍
Go有哪些特征?
- go是静态类型语言,有非常封堵的内置类型
- 面向对象:使用类型、组合、接口来实现面向
- 使用简单,开发难度小,Go也借鉴了python的一些语法
- 执行速度快, C++是编译速度快
- 自动垃圾回收
- 静态编译语言:windows编译的程序可以在任何windows电脑运行,Linux也一样,不像python一样需要安装各种依赖
Golang配置国内代理加速
由于初学者使用vscode足够使用,但是下载一些自动补全的插件总是失败,需要配置国内代理加速命令行下载
Golang V1.13
之后支持通过设置变量GOPROXY来修改代理地址,默认的代理服务器
1 | $ go env -w GO111MODULE=on |
go 数组
go语言里面数组是长度是不可变的,
Go语言的数组是一种值类型,它由相同类型的元素组成的固定长度的有序集合。数组可以存储任何类型的数据,包括整数、浮点数、布尔值、字符串等
。在声明数组时,需要指定数组元素的类型和长度。
Go数组有以下几个特点:
- 固定长度:数组的长度是在声明时确定的,且不可更改。
- 值类型:数组是一种值类型,将数组赋值给另一个数组时`,会将源数组复制一份,两个数组之间不存在任何关联。
- 连续内存空间:数组的元素在内存中是连续存储的,这也使得数组的访问速度非常快。
- 下标从0开始:Go数组的下标从0开始,即第一个元素的下标为0,最后一个元素的下标为length-1(length表示数组的长度)。
- 数组是不可变的:数组的大小不可动态改变,因此Go数组通常用于存储固定数量的元素。
可以使用以下语法来声明一个数组:
范例一
1 | package main |
范例2
1、通过循环遍历数组并求和
这个程序定义了一个名为main
的包,导入了fmt
包。在main
函数中,定义了一个包含5个整数的数组a
并初始化为{1, 2, 3, 4, 5}
。还定义了一个整数变量sum
并初始化为0。接下来使用for
循环遍历数组a
,将每个元素加到变量sum
中。最后使用fmt.Println()
函数打印输出"Sum:"
和变量sum
的值。
技术术语:
- 包(package):Go语言中用于组织和管理代码的基本单元。
- 导入(import):在Go程序中引入其他包中的代码。
- 数组(array):一种数据结构,可以存储多个相同类型的元素。
- 循环(loop):重复执行一段代码的结构。
- 变量(variable):用于存储数据的内存空间,在程序中可以被多次赋值。
1 | package main |
范例三: 求数组的最大值
主要定义了一个包含5个整数的数组a,并将其初始化为{1, 5, 3, 2, 4}。然后使用for循环遍历数组a,找到其中的最大值max。
在循环中,使用if语句比较a[i]和max的值,如果a[i]大于max,则将max的值更新为a[i]的值。最后,使用fmt包中的Println函数输出max的值。
1 | package main |
Go 切片
在 Go 中,切片(slice)
是一种动态数组,它可以按需增长或缩小,并且支持指针和长度属性。切片的底层实现类似于数组,但是长度是可变的
这意味着你无需提前确定切片的长度,就可以在运行时动态地扩容或缩容数组
。另外,由于切片本身并不存储任何数据,它只是一个对底层数组的引用,因此任何修改切片的操作都会直接影响到底层数组。
下面是一些切片常用的一些范例:
范例一: 创建切片
在这个例子中,我们先定义了一个空切片 a
,然后通过 append()
函数向切片中添加元素。需要注意的是,在使用 append()
函数时,如果切片的容量不足,系统会自动进行扩容,并重新分配更大的底层数组
1 | package main |
范例二:
1 | package main |
范例3:过make函数定义切片再赋值
make([]int, len(a))
的作用是创建一个长度为 len(a)
的 int 类型切片 b
,并将其初始化为零值。copy(b, a)
则是将切片 a
中的元素复制到切片 b
中,这样 b
就和 a
有着相同的元素序列。
1 | package main |
切片的增删改查
增: 在 Go 语言中,我们可以使用 append() 函数向切片中添加新元素。当切片容量不足时,它会自动扩展容量。
删: 删除依旧可以使用 append() 函数向切片中删除元素。 具体来说,我们可以通过分片语法将要删除的元素从原切片中删除,并使用
append()
函数将剩余元素重新组合成一个新的切片。改: 在 Go 中,可以通过下标直接访问切片中的元素,并进行修改。
查: 在 Go 中,可以通过下标或循环遍历切片来查询切片中的元素。
范例1:切片增加(append)
1 | package main |
范例2:切片删除
1 | package main |
范例3:切片修改
1 | package main |
范例4:切片查询
1 | package main |