ZBLOG

golang hash对象存储应用

在Go语言中,我们可以使用map和struct这两种哈希对象来存储数据。

1. 使用map存储键值对

map是一种基于哈希表实现的键值对集合。我们可以使用make函数创建一个空的map,也可以直接使用字面量创建一个非空的map。例如:

// 创建一个空的map
m := make(map[string]int)

// 创建一个非空的map
m := map[string]int{"apple": 2, "orange": 3}

向map中添加元素可以通过下标索引操作来完成。例如:

// 向m中添加元素
m["banana"] = 5

查找map中是否存在某个key可以使用_, ok := m[key]语法糖来判断。例如:

if _, ok := m["banana"]; ok {
    fmt.Println("m[\"banana\"] exists")
} else {
    fmt.Println("m[\"banana\"] does not exist")
}

遍历map时,我们需要注意到它是无序的,并且遍历顺序可能会发生变化。因此,在需要有序遍历时,我们需要手动将key按照指定顺序排序后再进行遍历。

2. 使用struct存储结构体对象

在Go语言中,struct也可以看做是一种哈希对象,因为它具有类似哈希表的结构:每个字段都有名称和类型信息,并且可以通过名字索引访问到相应的值。

我们可以通过定义一个struct类型来创建一个结构体对象。例如:

type Person struct {
    Name string
    Age  int
}

// 创建一个Person对象
p := Person{Name: "Tom", Age: 30}

我们可以使用点号操作符来访问结构体的字段值。例如:

fmt.Println(p.Name) // 输出:Tom

在需要对结构体进行序列化和反序列化时,我们可以使用encoding/json包提供的Marshal和Unmarshal函数。例如:

// 将p序列化为JSON字符串
b, _ := json.Marshal(p)
fmt.Println(string(b)) // 输出:{"Name":"Tom","Age":30}

// 将JSON字符串反序列化为Person对象
var p2 Person
json.Unmarshal(b, &p2)
fmt.Println(p2) // 输出:{Tom 30}

总之,在Go语言中,map和struct都是非常实用的哈希对象存储数据的方式,它们分别适用于不同的场景和需求。当我们需要存储键值对时,应该优先考虑使用map;当我们需要表示一组具有相同属性和行为的对象时,应该优先考虑使用struct。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=6652

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?