Golang Go语言中的 map 是不是用的不多?相比于 struct?
Golang Go语言中的 map 是不是用的不多?相比于 struct?
我现在遇到一个需求 返回一个 map, 需要只读. 如果是 python 就简单多了, 深拷贝就可以了.
但是 golang 中似乎没有深拷贝这一说法.
想想也对, map 的 key 和 value 不同, 实际上相当于是不同的类型 . 那么这个深拷贝 函数需要用到反射?
这个功能不是很常见吗? 为什么标准库没考虑写一个呢? 还是我没发现? 还是 map 压根用的就不多?
那 go web 中的 session 是什么结构呢?
不考虑性能的话,先把结构体序列化,然后再反序列化到 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语言中,map
和 struct
是两种用途不同的数据结构,它们的使用频率取决于具体的应用场景,不能简单地说 map
用得不多。
map
是一种内置的数据类型,用于存储键值对(key-value pairs),非常适合于需要快速查找、插入和删除的场景。例如,在实现缓存、字典或者需要动态添加和删除键值对的场景中,map
是非常合适的。
而 struct
是一种自定义的数据类型,用于将多个不同类型的数据组合在一起。struct
提供了更强的类型检查和更好的可读性,非常适合于表示具有多个属性的复杂对象。在Go语言中,struct
是实现面向对象编程特性的基础,广泛应用于数据建模、配置管理、错误处理等方面。
因此,map
和 struct
在Go语言中都有广泛的应用,它们的选择取决于具体的需求。在某些情况下,map
和 struct
甚至可以结合使用,以充分利用各自的优势。例如,可以使用 map
来存储多个 struct
对象,以实现更复杂的数据结构。
总的来说,map
和 struct
在Go语言中都是非常重要的数据结构,它们各自有着独特的用途和优势。在选择使用哪种数据结构时,应该根据具体的应用场景和需求来决定。