返回

谈谈JS和Go语言的映射与结构体

前端





## 映射

### JS中的映射

在JS中,映射是一种对象,它允许使用任意值作为键来存储值。键可以是字符串、数字、布尔值,甚至可以是另一个对象。值可以是任何类型的数据,包括其他对象、数组或函数。

const map1 = new Map();
map1.set('foo', 'bar');
map1.set(1, 'two');
console.log(map1.get('foo')); // bar


### Go中的映射

在Go中,映射是一种无序的键值对集合。键必须是唯一的,并且必须是字符串类型。值可以是任何类型的数据。

m := make(map[string]int)
m["foo"] = 1
m["bar"] = 2
fmt.Println(m["foo"]) // 1


### 映射的比较

| 特性 | JS | Go |
|---|---|---|
| 键的类型 | 任何值 | 必须是字符串 |
| 值的类型 | 任何类型 | 任何类型 |
| 无序 |||
| 键唯一 |||
| 查找时间复杂度 | O(1) | O(1) |
| 删除时间复杂度 | O(1) | O(1) |
| 插入时间复杂度 | O(1) | O(1) |

## 结构体

### JS中的结构体

在JS中,结构体是一种对象,它允许将相关的数据项组合在一起。结构体的属性可以是任何类型的数据,包括其他对象、数组或函数。

const person = {
name: 'John Doe',
age: 30,
occupation: 'Software Engineer'
};


### Go中的结构体

在Go中,结构体是一种类型,它允许将相关的数据项组合在一起。结构体的字段可以是任何类型的数据,包括其他结构体、数组或函数。

type Person struct {
Name string
Age int
Occupation string
}


### 结构体的比较

| 特性 | JS | Go |
|---|---|---|
| 类型 | 对象 | 类型 |
| 属性类型 | 任何类型 | 任何类型 |
| 无序 |||
| 键唯一 |||
| 查找时间复杂度 | O(1) | O(1) |
| 删除时间复杂度 | O(1) | O(1) |
| 插入时间复杂度 | O(1) | O(1) |

## 结论

映射和结构体都是非常有用的数据结构,它们可以用来解决各种各样的问题。映射非常适合存储需要快速查找的数据,而结构体非常适合存储相关的数据项。

在选择使用哪种数据结构时,需要考虑以下因素:

* 数据的类型
* 数据的用途
* 数据的规模
* 数据的访问模式