Golang Go语言中的 map 是不是用的不多?相比于 struct?

发布于 1周前 作者 yuanlaile 来自 Go语言

Golang Go语言中的 map 是不是用的不多?相比于 struct?
我现在遇到一个需求 返回一个 map, 需要只读. 如果是 python 就简单多了, 深拷贝就可以了.
但是 golang 中似乎没有深拷贝这一说法.
想想也对, map 的 key 和 value 不同, 实际上相当于是不同的类型 . 那么这个深拷贝 函数需要用到反射?

这个功能不是很常见吗? 为什么标准库没考虑写一个呢? 还是我没发现? 还是 map 压根用的就不多?

那 go web 中的 session 是什么结构呢?

7 回复

不考虑性能的话,先把结构体序列化,然后再反序列化到 map (非常省事,但是性能极其感人)

更多关于Golang Go语言中的 map 是不是用的不多?相比于 struct?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


对 这确实一个解决方案我差点就这么干了…

其实没太理解是什么情况下需要一个 map 而不是序列化后的字节流…?理论上来说 struct 和 map 序列化都的形式都是一样的,所以一般 HTTP API 返回 struct 就够了; gRPC 就完全都是 protobuf 生成的 struct 了,直接返回 map 的情况确实比较少。

https://github.com/jinzhu/copier 这个玩意好像可以, 实验中…

我需要一个只读的 session

我从 redis 里读出来的 session 是一个 map 因为 我只负责读, 我不确定 都写了哪些 信息. 所以 session 定义成 map[string]interface

我将这个结构返回给应用但是我并不想应用修改 里面的信息, 或者说我想让他修改了和没修改一样.

从我的方法取出来的 session 永远是一样的.

不知道说解释清楚没.

假设写 session 和 写应用的 是两个人, 那么 写应用的人 也就是 调用 session 的人是不可信的. 所以我想将它变成只读的.

希望数据不会被调用方修改
1. 调用方用得更舒适,返回原生的 Map,就得考虑 deep copy,你找到的 https://github.com/jinzhu/copier 很好呢。
2. 做封装,本质是提供不可修改( immutable )的数据,搜了下,https://github.com/benbjohnson/immutable 类似这样即可。

在Go语言中,mapstruct 是两种用途不同的数据结构,它们的使用频率取决于具体的应用场景,不能简单地说 map 用得不多。

map 是一种内置的数据类型,用于存储键值对(key-value pairs),非常适合于需要快速查找、插入和删除的场景。例如,在实现缓存、字典或者需要动态添加和删除键值对的场景中,map 是非常合适的。

struct 是一种自定义的数据类型,用于将多个不同类型的数据组合在一起。struct 提供了更强的类型检查和更好的可读性,非常适合于表示具有多个属性的复杂对象。在Go语言中,struct 是实现面向对象编程特性的基础,广泛应用于数据建模、配置管理、错误处理等方面。

因此,mapstruct 在Go语言中都有广泛的应用,它们的选择取决于具体的需求。在某些情况下,mapstruct 甚至可以结合使用,以充分利用各自的优势。例如,可以使用 map 来存储多个 struct 对象,以实现更复杂的数据结构。

总的来说,mapstruct 在Go语言中都是非常重要的数据结构,它们各自有着独特的用途和优势。在选择使用哪种数据结构时,应该根据具体的应用场景和需求来决定。

回到顶部