Golang编程:深入理解array、slice与map
142 浏览量
更新于2024-09-02
收藏 64KB PDF 举报
"Golang学习笔记(四):array、slice、map"
在Golang中,数组、切片和映射(map)是三种非常重要的数据结构,它们各自有着不同的特性和用途。
一、Array(数组)
1. **声明与赋值**:
数组是一种固定大小的序列,其长度在声明时就必须指定。例如:
```go
var a [5]int // 定义一个长度为5的整型数组,初始值为0
var b int = [5]int{1, 2, 3, 4, 5} // 声明并初始化
a := [3]int{1, 2, 3} // 使用 := 简化声明
```
对于多维数组,可以这样定义:
```go
var doubleArray [2][4]int{{1, 2, 3, 4}, {5, 6, 7, 8}} // 2x4 的二维数组
```
数组的长度是其类型的一部分,不可改变。
2. **元素访问**:
- 使用索引访问,如 `array[i]`。
- 使用 `for` 循环遍历:
```go
for i := 0; i < len(array); i++ {
fmt.Println(i, array[i])
}
```
- 或使用 `range` 遍历:
```go
for i, v := range array {
fmt.Println(i, v)
}
```
3. **数组与指针**:
数组赋值是值的复制,不是引用。如果需要传递数组的引用,应使用切片(slice)。
二、Slice(切片)
1. **创建与初始化**:
切片是对数组的引用,可以动态增长。创建方式:
```go
s := make([]int, 3) // 创建一个长度为3的空切片
s = []int{1, 2, 3} // 初始化切片
s := a[1:3] // 从数组 a 中创建切片
```
切片的长度可以通过 `len(s)` 获得,可以通过 `s = append(s, val)` 添加元素。
2. **操作与特性**:
- 切片可以动态扩展,而数组的长度是固定的。
- 切片可以共享同一个底层数组,因此对切片的修改会影响到原始数组。
- 切片可以通过索引或 `range` 遍历元素。
三、Map(映射)
1. **声明与初始化**:
映射用于存储键值对,声明方式:
```go
m := make(map[string]int) // 声明一个字符串到整型的映射
m := map[string]int{"key1": 1, "key2": 2} // 初始化映射
```
映射的键和值可以是任何可比较的类型。
2. **操作与访问**:
- 使用 `m[key]` 获取或设置映射中的值。如果键不存在,`m[key]` 返回零值。
- 使用 `delete(m, key)` 删除键值对。
- 使用 `len(m)` 获取映射中键值对的数量。
- 遍历映射需使用 `for` 循环,因为映射无顺序:
```go
for key, value := range m {
fmt.Println(key, value)
}
```
在实际编程中,根据需要选择使用数组、切片或映射。数组适用于固定大小且不需要动态调整的数据,切片则提供了灵活的数组操作,而映射则适合关联数据的存储。理解它们之间的差异和用法对于编写高效的Go程序至关重要。
2018-07-01 上传
2015-10-26 上传
2020-09-22 上传
2023-04-29 上传
2019-07-02 上传
2019-03-21 上传
2014-01-08 上传
2018-06-04 上传
2022-02-08 上传
weixin_38514523
- 粉丝: 8
- 资源: 939
最新资源
- 旅行商问题Python实现
- Didar-309-项目-
- 传送带的PLC程序控制.rar
- riichi:麻雀飜符手役点数计算(日麻和牌点数计算)
- nealbarshes.github.io:GitHub页面
- CORPICECREAM:激励活动指导处处长“萨尔塞多塞科塞多公司的商业生产者”
- Refractor02:重新提交前一张票
- zsh-xah-fly-keys:zsh上的Xah Fly键!
- ant-deb-task:从 code.google.compant-deb-task 自动导出
- 毕业生信息管理系统asp毕业设计(源代码+论文+开题报告+外文翻译+文献综述+答辩PPT).zip
- 工作交接数据库系统.zip
- minikube-client:为Minikube生成客户端证书
- Accuinsight-1.0.3-py2.py3-none-any.whl.zip
- mastermind:请参阅使用D3.js用Javascript编写的Mastermind的新交互式Web版本。
- mycalendar:HTMLに组み込みやすいカレンダー
- 鼠标移动数据光标:在鼠标移动时显示和更新图形标题栏中图像的像素值。-matlab开发