gpt4 book ai didi

linux - golang 将结构写为原始数据

转载 作者:IT王子 更新时间:2023-10-29 02:28:57 26 4
gpt4 key购买 nike

我正在使用 GO 开发一种新型数据库。我想做的一件事是拥有一个分布式磁盘,这样我就可以在多台机器上分发查询(想想 Pi 类型的架构)。这意味着在原始磁盘上构建我自己的结构。

我的挑战是我找不到一个 GO 程序包可以让我从指向结构的指针写入 N 个字节。所有 IO 包都限制对 []byte slice 的访问。

这对于保护来说很好,但如果我必须通过某种编码形式通过字节数组缓冲所有内容,它会减慢对特定对象的访问。

有人知道如何进行原始 IO 吗?或者我是否必须将 GOB 作为我的 IO 单元来处理并遭受编码/解码的惩罚?

最佳答案

首要警告:不要这样做:它既不安全也不便携

对于给定的结构,您可以对其进行反射(reflection)以计算出实际结构的内存大小,然后使用 unsafe 将其不安全地转换为 []byte >.

例如:(*[内存大小]byte)(unsafe.Pointer(&mystruct))

这会给你一些 C-ish 的东西,完全没有安全保证或可移植性。

我将引用 Go spec :

A package using unsafe must be vetted manually for type safety and may not be portable.

您可以在此 Go and Memory layout 中找到更多详细信息发布,包括将结构不安全地视为字节所需的所有步骤。

总的来说,检查 Go 在低层次上的功能是很有趣的,但在你的情况下这绝对是错误的做法。任何真正的数据基础架构都需要比将内存中的结构转储到磁盘更复杂的存储逻辑。

关于linux - golang 将结构写为原始数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48130984/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com